对于Mac OS X,是否有socket.AF_PACKET的替代方法?

时间:2016-06-07 07:52:05

标签: macos sockets python-3.5

我是一个编程菜鸟,遵循python视频教程来创建数据包嗅探器并使用socket.AF_PACKET,但我的系统没有这个。我猜它是因为操作系统不同。 这有什么简单的解决方法吗?这是main第一行的AF_PACKET代码:

import socket
import struct
import textwrap

def main():
    conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))

    while True:
        raw_data, addr = conn.recvfrom(65536) # biggest buffer size
        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))

# Unpack ethernet frame
def ethernet_frame(data): # pass packets into this function
    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:] #htons is endian bit compatibility

# Return properly formatted MAC address (ie AA:BB:CC:DD:EE:FF)
def get_mac_addr(bytes_addr):
    bytes_str = map('{:02x}'.format, bytes_addr)   # 2 decimal places
    return ':'.join(bytes_str).upper()  # mac addr


main()

1 个答案:

答案 0 :(得分:-1)

我假设您正在使用Windows

而不是AF_PACKET使用AF_INET

而不是socket.ntohs(3)使用`socket.IPPROTO_IP