所以我对套接字和嗅探器编程有一些疑问...... 我刚刚开始编程并且有一个项目,我希望使用通过我的网络发送的信息。
我试着在youtube上观看几个关于这个过程的视频,并尝试找到更好的材料来进一步研究它,但我找不到对我有意义的来源。
我收录的代码来自youtube上的视频,并且在他们解释时似乎有意义,但我猜他可能一直在使用Linux或其他东西,因为Windows不支持AF_PACKET。经过一些研究后我发现人们使用AF_INET,但我得到了错误:
OSError:[WinError 10043]请求的协议尚未配置到系统中,或者没有实现它的实现
有没有人可以为我解释插座的地方或方式?我不打算在这个项目的最终版本中使用windows,而且我还打算将来修改它用于蓝牙,所以如果我能找到一种方法,我想了解背后的原因。< / p>
` 导入套接字 导入结构 import 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()
`
答案 0 :(得分:1)
使用套接字进行数据包嗅探的操作系统是:
Windows不在该列表中(在名称,OS X,Solaris,HP-UX,AIX等中没有&#34; BSD&#34;)。 Linux和Irix都碰巧使用套接字进行嗅探,但这只是他们的选择(并且他们没有选择相同的类型的套接字,他们恰好选择了套接字)
如果你想编写一个嗅探器,你可能最好建议使用libpcap / WinPcap的包装器,让它们处理在特定操作系统上进行数据包嗅探的痛苦细节。 Python的包装包括pylibpcap和pcapy;我不知道它们中的任何一个是否可以在Windows上使用WinPcap。
(请注意,您不能保证在嗅探数据包上获得以太网标头;您应该调用pcap_datalink()
,或者等同于包装器的等价物,并检查其返回值 - 如果它是不是DLT_EN10MB
,或者是包装器的等价物,您将无法获得以太网接头。)
AF_INET
原始套接字位于任何平台上,不会为您提供以太网标头。根据{{3}}附录A和该协议,我不知道<3> 3的协议参数你得到的是GGP的互联网协议号码是古老的,据我所知,没有使用;你最终可能会得到一个套接字,你可以在其上发送GGP数据包并从中接收GGP数据包,这是值得的(这并不多)。 (另外,C中socket()
调用的参数是按主机字节顺序排列的,Python可能也是一样的,所以你可能不希望那里有socket.ntohs()
,而不是它#&# 39;会有所作为。)