如何获取socket发送的局域网IP(linux)

0 投票
2 回答
661 浏览
提问于 2025-04-15 17:09

我需要一些代码来获取我刚创建的套接字的地址(这样可以过滤掉来自本地主机的多播网络数据包)

这个:

socket.gethostbyname(socket.gethostname())

在Mac上可以用,但在Linux上只返回本地主机的IP……有没有办法获取局域网的地址

谢谢

--编辑--

有没有可能直接从套接字的设置中获取,比如操作系统必须选择一个局域网IP来发送……我可以使用getsockopt(... IP_MULTICAST_IF...)吗?不过我不太清楚怎么用这个……?

--- 编辑 ---

解决了!

send_sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 0)

在发送套接字上加上这个设置后,发送的数据包不会再回显到发送它的主机,这样程序就不需要知道操作系统选择了哪个IP来发送了。

太好了!

2 个回答

0

简单回答 - socket.getpeername()(前提是socket是一个套接字对象,而不是一个模块)

(在python/ipython/idle/... 这些交互式环境中练习是非常有帮助的)

.. 或者如果我仔细读了你的问题,也许可以用 socket.getsockname() :)

1

看起来你在寻找socket对象的getsockname方法

撰写回答