Python包嗅探器和sockets的Noobs

所以我有关于套接字嗅探器编程的一些问题…我刚开始编程,并有一个项目,我想要使用通过我的networking发送的信息。

我试着在YouTube上观看几个关于这个过程的video,试图find更好的材料来进一步研究,但是我一直没能find对我有意义的来源。

我收录的代码来自YouTube上的一个video,在他们解释这个video时似乎是有道理的,但是我想他可能已经在使用Linux或者其他的东西,因为Windows不支持AF_PACKET。 经过一番研究,我发现人们使用AF_INET,但我得到了错误:

OSError:[WinError 10043]请求的协议尚未configuration到系统中,或者没有实现它的存在

有没有一个地方或某种方式可以为我解释套接字? 我不打算在这个项目的最终版本中使用Windows,而且我也计划在未来对蓝牙进行修改,所以如果我能find办法做到这一点,我想了解一下背后的原因。

导入套接字导入结构导入textwrap

def main(): conn = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.ntohs(3)) while True: raw_data, addr = conn.recvfrom(65535) dest_mac, src_mac, eth_proto, data = ethernet_frame(raw_data) print('\nEthernet Frame:') print('Destination: {}, Source: {}, Protocol: {}'.format(dest_mac, src_mac, eth_proto, data[:14])) #unpack ethernet frame def ethernet_frame(data): dest_mac, src_mac, proto = struct.unpack('! 6s 6s H', data[:14]) return get_mac_addr(dest_mac), get_mac_addr(src_mac), socket.htons(proto), data[14:] #Get Mac Address def get_mac_addr(bytes_addr): bytes_str = map('{:02x}'.format, bytes_addr) return ':'.join(bytes_str).upper() main() 

`

Solutions Collecting From Web of "Python包嗅探器和sockets的Noobs"

您使用套接字进行数据包嗅探的操作系统是:

  1. Linux的
  2. IRIX

Windows不在该列表中(名称中不含“BSD”,OS X,Solaris,HP-UX,AIX等)。 Linux和Irix都碰巧使用套接字来进行嗅探,但是这只是他们的选择(而且他们没有选择相同类型的套接字,他们恰好选择了套接字)。

如果你想写一个嗅探器,最好建议使用一个libpcap / WinPcap的包装,让他们处理在特定的操作系统上完成数据包嗅探的痛苦细节。 Python的包装器包括pylibpcap和pcapy ; 我不知道他们中的任何一个是否在Windows上使用WinPcap工作。

(请注意,您不能保证在嗅探的数据包上获得以太网标头;您应该调用pcap_datalink() ,或者任何包装的等价物,并检查其返回值 – 如果不是DLT_EN10MB ,或者包装的等价物,则不会获得以太网头。)

任何平台上的AF_INET原始套接字不会给你以太网头。 我不知道你会得到什么协议参数为3 – 3是GGP的互联网协议号码,根据RFC 823附录A,该协议是古老的,没有使用据我所知; 你可能会得到一个套接字,你可以在其上发送GGP数据包,并从中可以接收GGP数据包,这是值得的(这不是很多)。 (另外,C语言中的socket()调用的参数是按照主机字节顺序的,而且Python可能也是一样的,所以你可能不需要socket.ntohs()在那里, 。)