这是我的代码:
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
个连接)状态。
答案 0 :(得分:1)
好的,我的要求是建立连接。但我出于其他目的在界面上嗅探流量。所以,我虽然可以从原始套接字获得TCP状态。但我发现/proc/net/tcp
:有st
字段,我可以从中获得ESTABLISHED
个连接。所以,我应该连续阅读/proc/net/tcp
,以便在不同的帖子中获得ESTAB
特定时间。
所以答案是/proc/net/tcp
。检查this question。或者我可以使用netfilter