所以我有一些关于套接字和嗅探器编程的问题。。。 我刚刚开始编程,有一个项目,我想使用通过我的网络发送的信息。在
我试着在youtube上看了几段关于这个过程的视频,并试图找到更好的素材来进一步研究,但我没有找到一个对我有意义的来源。在
我所包含的代码来自youtube上的一段视频,当他们解释的时候似乎有道理,但我猜他可能是在使用Linux或者其他什么东西,因为Windows不支持AF_包。经过一些研究,我发现人们使用的是AF_INET,但我得到了一个错误:
OSError:[WinError 10043]请求的协议尚未配置到系统中,或者不存在该协议的实现
有没有什么地方或方法可以让别人给我解释一下插座?我不打算在这个项目的最终版本中使用windows,而且我还计划在将来为蓝牙修改它,所以如果我能找到一种方法,我想学习背后的推理。在
在` 导入套接字 导入结构 导入文本换行
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()
`
使用套接字进行数据包嗅探的操作系统有:
Windows不在该列表中(名称中带有“BSD”、OS X、Solaris、HP-UX、AIX等也不在其中)。Linux和Irix都碰巧使用套接字进行嗅探,但这只是他们的选择(它们没有选择相同的类型的套接字,它们只是碰巧选择了套接字)。在
如果您想编写一个嗅探器,那么最好使用libpcap/WinPcap的包装器,让它们处理在特定操作系统上执行包嗅探的痛苦细节。Python的包装器包括pylibpcap和pcapy;我不知道它们是否都能在Windows上使用WinPcap。在
(请注意,您不能保证在已嗅探的数据包上获取以太网头;您应该调用},或者包装器的等效值,则不会获得以太网报头。)
pcap_datalink()
,或者任何与包装器等效的东西,并检查其返回值-如果不是{AF_INET
原始套接字,在任何平台上,都不会提供以太网报头。我不知道协议参数3-3是GGP的互联网协议号,据我所知,这个协议是古老的,而且据我所知,你可能会得到一个套接字,在这个套接字上你可以发送GGP包,从中你可以接收GGP包,不管值多少钱很多)。(另外,C中的socket()
调用的参数是按主机字节顺序排列的,Python的工作原理可能是一样的,所以您可能不想让socket.ntohs()
出现在那里,而不是因为它会有什么不同。)相关问题 更多 >
编程相关推荐