【问题标题】:TCP connection state from RAW SOCKET packet sniffing来自 RAW SOCKET 数据包嗅探的 TCP 连接状态
【发布时间】:2016-12-27 07:26:19
【问题描述】:

这是我的代码:

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 连接)状态。

【问题讨论】:

标签: python sockets tcp


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-06-06
    • 2013-01-28
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2011-03-26
    • 1970-01-01
    • 2023-01-26
    相关资源
    最近更新 更多