如何在python中解码TCP/IP包?

2024-10-02 02:33:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个指定端口的IP地址上,以TCP/IP数据包格式连续地获取一个滴答滴答的市场数据流。我想把它记录在一个csv文件中,或者围绕数据流进行交易和数据分析。在

服务器以以下格式发送所有数据包

typedef struct
{
CHAR cCompOrNot
SHORT nDataSize;
SHORT iNoOfPackets;
}ST_COMP_BATCH_HEADER
typedef struct
{
SHORT iCode;
SHORT iLen;
LONG lSeqNo;
} ST_INFO_HEADER;
typedef struct
{
.
.
}ST_DATA_INFO;
typedef struct
{
SHORT iCheckSum;
CHAR cEOT;
} ST_INFO_TRAILER;
typedef struct
{
ST_INFO_HEADER stInfoHdr;
ST_DATA_INFO stDataInfo;
ST_INFO_TRAILER stInfoTrailer;
.
}ST_DATA_PACKET

从服务器接收的所有数据包都由压缩批处理头组成。 压缩批处理头提供有关数据包的信息 压缩与否,以下数据包中的包数和数据包的总大小。客户端需要使用 LZO解压算法。解压缩每个数据包后 由ST_INFO_头组成,它有标识类型的iCode字段 包的。使用iCode字段,将数据信息包映射到 数据包。在

那么有没有什么方法可以让我用Python库来解码这些数据包中的数据呢。在

提前谢谢!在


Tags: info服务器信息data格式数据包struct数据流
1条回答
网友
1楼 · 发布于 2024-10-02 02:33:21

使用套接字库。下面是连接到tcp/ip端口并直接从Python站点解析数据的代码示例(将HOST static设置为所需的ip):

# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
    data = conn.recv(1024)
    if not data: break
    conn.sendall(data)
conn.close()

对于Python 2.x:

https://docs.python.org/2/library/socket.html

对于Python 3.x:

https://docs.python.org/3/library/socket.html

用于Python的LZO库:

https://pypi.python.org/pypi/python-lzo/1.08

相关问题 更多 >

    热门问题