他们相信天堂是有的,可以实现的,但在现世界与那天堂的中间隔着一座海,一座血污海,人类泅得过这血海,才能登彼岸,他们决定先实现那血海。

Python多播


多播协议是个好东西。 服务端

import socket
import struct

# 多播地址和端口
MULTICAST_GROUP = '239.0.0.110'
SERVER_PORT = 12345

# 创建 UDP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
# 允许地址重用
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定到指定端口
server_socket.bind(('', SERVER_PORT))

# 将套接字加入多播组
group = socket.inet_aton(MULTICAST_GROUP)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
server_socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

print(f"Listening on multicast address {MULTICAST_GROUP}:{SERVER_PORT}...")

try:
    while True:
        # 接收数据
        data, client_address = server_socket.recvfrom(1024)
        message = data.decode('utf-8')
        print(f"Received message from {client_address}: {message}")

        # 向客户端发送响应
        response = "Message received successfully!"
        server_socket.sendto(response.encode('utf-8'), client_address)
except KeyboardInterrupt:
    print("Shutting down...")
finally:
    server_socket.close()

客户端

Read more ⟶

文件生成动态二维码


将图片/文件转为二维码动画

yum install qrencode 
test="$(cat dianlong.jpg| base64|tr '\n' ' '|sed 's/[[:space:]]//g')"
echo $test >> base64.txt #文件转base64
split -b 1k base64.txt 1_ #按1K分割
for x in $(find -type f  -name "1_*"); do cat $x|qrencode -o $x.png -s 4 ;done
ffmpeg -framerate 6  -pattern_type glob -i '1_*.png'  -loop 0 out1.gif #转GIF
ffmpeg -framerate 10  -pattern_type glob -i '1_*.png'  -c:v libx264 -pix_fmt yuv420p out.mp4
#计算帧数,验证
ffprobe -i out.mp4
ffmpeg -i out.mp4  -map 0:v:0 -c copy -f null -
ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 out.mp4

还原:

Read more ⟶

Cpuid和序列号背后的那些故事


最近测试反馈了一个问题,每次重启服务器,我们某个版本的业务系统中的机器码都会改变,导致根据机器码算出来的许可证失效,从而使软件无法使用。 这个问题反馈了有一段时间了,但是本地一直没复现。然后前几天测试说又复现了,马上去看了下测试环境,服务器是一台国产化FT S2500服务器,验证了下,果然如此,马上去看了下关键代码。

Read more ⟶

进程Socket描述符的那些事


前几天看到有人发的一个面试题,问的是MySQL连接的进程描述符的问题。

在Linux里,一切皆文件,那进程描述符,实际就是文件描述符了。

我们还知道Linux 内核提供了一种通过 proc文件系统,/proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux内核空间和用户间之间进行通信。在 /proc文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。

Read more ⟶

Java安全策略配置和沙箱闲话


之前一篇文章提到了System.exit和SecurityManager,引入了下面的代码

public class SelfSecurityManager extends SecurityManager{
	..//
   @Override
    public void checkExit(int status) {
        super.checkExit(status);
        throw new ExitException(status);
    }
}

通过自定义SecurityManager来禁止System.exit的执行,这里我们来分析下其实现原理,看下super.checkExit方法

Read more ⟶

谁杀死了这个进程


之前文章提到服务器上一个进程启动后不到三分钟就挂掉,到底是什么原因挂掉了,这个问题可以写篇文章了。进程死了,无非就两种可能:自杀,他杀。他杀又包括第三方杀害和系统判死刑。

先来看自杀。

1.自杀

我们以Java为例,Java程序在main方法运行完就会退出,这种属于自杀。或者像下面这样

Read more ⟶

坚果3手机刷魔趣体验


坚果3,发布于2018年4月,骁龙625处理器,4G内存,安卓7.1系统。

我手里这台,已经退役两个多月了,屏幕摔得到处是裂缝,老罗破产了,系统最后一次更新是2020年2月了,而且安卓7.1也老了一点。锤子手机其实不是太喜欢,它的特色功能我一个都不喜欢,什么one step,大爆炸,胶囊,我都用不上,当时买它只是因为便宜,性价比不错。另外,锤子的手机也不够开放,我也卸载或冻结了很多它自带的系统APP,导致系统APP卸载了,菜单还保留着,但不能点击,额,不能忍受,所以越用越不顺眼,正好换了新手机,就刷机了。

Read more ⟶

Linux恶意ELF文件分析


起因是某客户的服务器上,只要一启动server,过不了几秒就被kill,然后错误日志也看不出啥。 server是基于jvm的,怎么看一个进程被哪个进程杀死,这个可以写一篇文章了。

自信一点,这肯定不是我们代码的问题导致JVM崩溃啊,毫无疑问是那些做安全的脚本小子搞的。

Read more ⟶

Keycloak接入自研系统


简介

keycloak是一个非常强大的权限认证系统,我们使用keycloak可以方便的实现SSO的功能。虽然keycloak底层使用的wildfly,但是提供了非常方便的Client Adapters和各种服务器进行对接,比如wildfly,tomcat,Jetty等。

Read more ⟶

SuperSet安装配置


Centos8安装Superset。Superset 是 Airbnb (知名在线房屋短租公司)开源的数据探查与可视化平台(曾用名 Panoramix、Caravel ),也就是BI,该工具在可视化、易用性和交互性上非常有特色。

Read more ⟶