我有一些代码通过UDP多播侦听"公告".我可以获取发件人的IP地址,但我真正需要的是发件人的MAC地址(因为IP地址可以并且将会改变).
有没有一种简单的方法在Python中执行此操作?
包含的代码段仅供参考,但可能不必要.
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # Allow multiple sockets to use the same PORT number sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Bind to the port that we know will receive multicast data sock.bind((self.interface, MCAST_PORT)) # Tell API we are a multicast socket sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) # Tell API we want to add ourselves to a multicast group # The address for the multicast group is the third param status = sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, socket.inet_aton(MCAST_ADDR) + socket.inet_aton(self.interface)); data, addr = sock.recvfrom(1024)
...
一般来说,你不能获得mac地址.您可能在LAN上使用ARP成功,但在Internet上则不可能.
考虑一下您收到的数据包具有发送方NATting路由器的IP地址的情况.数据包可能已经遍历了任意数量的中间机器,每个中间机器也具有mac地址.谁应该支持你所追求的那种查询?对于整个过程中的所有机器,发送者的mac地址完全没用,为什么还要支持那种查找呢?
而且,顺便说一句,在许多网卡上更改mac地址是微不足道的,因此将它用作某种独特的ID并不是一个明智的想法.