在Python中查找多播UDP消息发送者的MAC地址?

2024-05-19 01:36:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些代码通过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)

。。。


Tags: theto代码selfipdataportsocket
3条回答

我不确定是否有可能得到发送者的MAC地址,因为MAC地址是一个链接级别的地址,而不是IP这样的网络级别的地址。当包含UDP消息的包从发送方路由到接收方时,MAC地址将在网络中的每个跳处发生变化。

一般来说,你不能得到mac地址。你可以在局域网上成功地使用ARP,但在互联网上是不可能的。

考虑这样的情况:您接收的数据包具有发送方的NATting路由器的IP地址。数据包可能已经遍历了沿途的任何数量的中间机器,每个机器也有mac地址。应该由谁负责支持您要查找的类型?对于一路走来的所有机器,发送者的mac地址都是完全无用的,那么为什么还要费心支持这种查找呢?

而且,顺便说一下,changing the mac address在许多网卡上都是微不足道的,所以将它用作某种唯一的ID并不是一个明智的主意。

您需要的协议是ARP。查看此question/answer了解详细信息

相关问题 更多 >

    热门问题