[英]Sniffing ethernet packets in monitor mode in python without a third party library?
我可以使用python在混杂模式下嗅探数据包,同时使用以下代码连接到我的无线网络。 我已经对此进行了彻底的测试,并且知道它可以工作。 我在网络上看到正常的数据包:
rawSocket = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0003))
packet = rawSocket.recvfrom(2048)
ethernet_header = packet[0][0:14]
ethernet_detailed = unpack("!6s6s2s", ethernet_header)
print ethernet_detailed
但是,我想更进一步,并在不连接任何网络的情况下,以我的wifi卡在监控模式下尝试此操作。 我知道我的卡支持监控模式,因为它是Alfa AWUS066NH。 我使用以下代码将py卡置于监视模式。
os.system('ifconfig %s down' % interface)
os.system('iwconfig %s mode monitor' % interface)
os.system('ifconfig %s up' % interface)
但是现在,当我运行上面的相同代码时,它在混杂模式下使用,并且我只得到一个ethernet_header
像这样的单个数据包('\\x00\\x00\\x12\\x00.H', '\\x00\\x00\\x00\\x02l\\t', '\\xc0\\x00')
为什么我看不到除描述的以外的任何数据包? 另外我应该如何在监听模式下监听? 我想在没有第三方的情况下这样做,但是如果需要的话,我会这样做。
由于您将卡置于监视模式,因此现在正在查看802.11帧(信标,探测请求/响应等)。
您在0:14字节范围内看到的内容是卡在接收到的数据之前的Radio Tap Header的一部分。 第三个字节指示无线电分接头头的长度为0x12(18个字节)。 Radio Tap Headers并非始终为0x12,因此802.11数据从第三个字节+ 1的值开始。
里面有多余的东西
ethernet_header = packet[0][0:14]
这不是必需的
rawSocket = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0003))
packet = rawSocket.recvfrom(2048)
ethernet_header = packet[0:14]
ethernet_detailed = unpack("!6s6s2s", ethernet_header)
print ethernet_detailed
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.