项目需要用到采用python实现维护测试工具,测试对象是Linux设备,需要在PC端采用python获取Linux设备相关信息
一、采用udp获取普通信息
udpserver = socket(AF_INET, SOCK_DGRAM)
udpserver.bind(ip, port)
data, client_addr = udpserver.recvfrom(BUFSIZE)
二、采用tcp获取重要信息
tcpclient = socket(AF_INET, SOCK_STREAM)
tcpclient.connect(ip, port)
data = tcpclient.recv(BUFFSIZE)
注:tcp获取的网络报文时分片、组包的,需要考虑此种情况
三、采用python的ctypes进行解析网络中的报文
class abc_info_st(BigEndianStructure):
_fields_ = [
('_info_a', c_uint),
('_info_b', c_ushort ),
('_info_c', c_ubyte ),
('_recv', c_ubyte * 3),
('_info_str', c_char * 32),
]
根据Linux设备端的结构体信息定义对应python端结构体信息,字符串注意采用c_char类型
abc_info = abc_info_st()
memmove(addressof(abc_info), data, sizeof(abc_info)) //data及为第一、二节socket接收的data
print('%d %d %d %s ' % (abc_info._info_a, abc_info._info_b, abc_info._info_c,abc_info._info_s.decode()))
注:字符串类型需要采用decode(原因是涉及到python的语言的编码格式需要utf8、unicode等格式)
三、记录日志
with open('abc_log.log', 'a') as f:
f.write(abc_info._info_s.decode())
参考文档:
python做科学计算: http://www..com/moon1992/p/4946114.html
python中的父子进程 https://blog..net/wenzhou1219/article/details/81320622
UDPServer使用 https://www..com/IQ-Python/p/6814529.html
python socketserver支持多线程模式 https://www..com/bigberg/p/7763503.html