如何获取socket发送的局域网IP(linux)
我需要一些代码来获取我刚创建的套接字的地址(这样可以过滤掉来自本地主机的多播网络数据包)
这个:
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
方法。