我正在使用Python构建数据包嗅探程序,但是我已经遇到了速度提升。出于某种原因,我认为套接字没有正确导入,因为我在运行程序时收到以下消息:AttributeError: module 'socket' has no attribute 'AF_PACKET'
我正在使用OS X而Pycharm是我的IDE,如果有帮助,我正在运行最新版本的Python。
无论如何,到目前为止我的完整程序是:
import struct
import textwrap
import socket
def main():
connection = socket.socket(socket.AF_PACKET, socket.SOCKET_RAW, socket.ntohs(3))
while True:
rawData, address = connection.recvfrom(65535)
reciever_mac, sender_mac, ethernetProtocol, data = ethernet_frame(rawData)
print('\nEthernet Frame: ')
print('Destination: {}, Source: {}, Protocol: {}'.format(reciever_mac, sender_mac, ethernetProtocol))
# Unpack ethernet frame
def ethernet_frame(data):
reciever_mac, sender_mac, protocol = struct.unpack('! 6s 6s H', data[:14])
return getMacAddress(reciever_mac), getMacAddress(sender_mac), socket.htons(socket), data[14:]
# Convert the Mac address from the jumbled up form from above into human readable format
def getMacAddress(bytesAddress):
bytesString = map('{:02x}'.format, bytesAddress)
macAddress = ':'.join(bytesString).upper()
return macAddress
main()
提前感谢您的帮助!
答案 0 :(得分:6)
实际上,AF_PACKET在OS X上不起作用,它适用于Linux。
答案 1 :(得分:0)
我在macOS 10.13.1上使用Python 3.6.3和这个很酷的scapy fork that is compatible with python3遇到了这个问题。
我使用的是该工具的0.22版,并且根据建议in this issue降级到版本0.21修复了此问题!
如果scapy不是一个可行的选择,你也可以按照建议in this post尝试pcap库(虽然这里似乎需要使用python 2)。