来自RAW SOCKET数据包嗅探的TCP连接状态

时间:2016-12-27 07:26:19

标签: python sockets tcp

这是我的代码:

ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, 3)
ins.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 2**30)
ins.bind((interface_name, 3))

while True:
    fmt = "B"*7+"I"*21
    pkt, sa_ll = self.ins.recvfrom(65535)
    x = struct.unpack(fmt, ins.getsockopt(socket.IPPROTO_TCP, socket.TCP_INFO, 92))
    print "===>",x
    print "HEX Packet",hexlify(pkt)
    process_ipframe(sa_ll[2],hexlify(pkt))

出现socket.error: [Errno 92] Protocol not available错误。 或者是否有更好的方法来获取连接的TCP(仅需ESTAB个连接)状态。

1 个答案:

答案 0 :(得分:1)

好的,我的要求是建立连接。但我出于其他目的在界面上嗅探流量。所以,我虽然可以从原始套接字获得TCP状态。但我发现/proc/net/tcp:有st字段,我可以从中获得ESTABLISHED个连接。所以,我应该连续阅读/proc/net/tcp,以便在不同的帖子中获得ESTAB特定时间。

所以答案是/proc/net/tcp。检查this question。或者我可以使用netfilter