我正在尝试让Python收听我的网络并列出所有传入的连接,只要它运行。但我碰到了一堵砖墙,似乎无法找到。有什么建议?使用Python 2.7.3
答案 0 :(得分:2)
@millimoose: 我不认为他需要/想要使用python监听所有套接字。 他们之后更有可能是什么 Python bindings to libpcap
答案 1 :(得分:1)
您可以使用netstat
列出所有传入的网络连接。有人甚至编写了netstat
:http://voorloopnul.com/blog/a-python-netstat-in-less-than-100-lines-of-code/
答案 2 :(得分:0)
您的问题在细节上非常模糊,但如果您只想观察机器的入站连接,那么只需几行python即可实现。
from socket import *
rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)
rawSocket.bind(('IP_ON_IFACE_TO_LISTEN_ON', 0))
while True:
data = rawSocket.recv(2048)
# http://en.wikipedia.org/wiki/IPv4#Packet_structure
# Internet Header Length; Have to determine where the IP header ends
ihl = ord(data[0]) & 15
ip_payload = data[ihl*4:]
# http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure
# Match SYN but not SYN/ACK
if (ord(ip_payload[13]) & 18) == 2:
src_addr = inet_ntoa(data[12:16])
dst_addr = inet_ntoa(data[16:20])
# Could use struct.unpack, might be clearer
src_port = (ord(ip_payload[0]) << 8) + ord(ip_payload[1])
dst_port = (ord(ip_payload[2]) << 8) + ord(ip_payload[3])
src_str = (src_addr+':'+str(src_port)).ljust(22)
dst_str = (dst_addr+':'+str(dst_port))
print "%s=> %s" % (src_str, dst_str)
这将打印所有设置了SYN标志的入站TCP数据包,无论RST或ICMP响应如何。你的问题陈述“列出所有传入的连接”,因为UDP是无连接的,我假设这就是你所要求的。
FWIW