2
我想写一个嗅探所有传入TCP数据包的数据包嗅探器。在我查找的一个示例中,而不是使用SOCK_RAW而不是SOCK_STREAM?python3中的原始套接字
try:
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
except socket.error as e:
print('Socket creation failed. Error Code {} Message {}'.format(str(e[0]),str(e[1])))
sys.exit()
#Include IP headers
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
packet = s.recvfrom(65565)
1)在上述情况下,我可以使用SOCK_STREAM而不是SOCK_RAW。 2)recvfrom(65565)是什么意思? 这是否意味着从所有TCP端口recv而不是特定的TCP端口?
recvfrom()会从所有的TCP端口接收数据?套接字抽象如何与端口配合使用? – liv2hak
由于端口是TCP和UDP的概念,因此不会从原始套接字的端口接收数据*。套接字将接收所有具有指定IPPROTO_ *的数据包(在您的情况下为IPPROTO_TCP)。 –