linux下通过多播获取本机IP地址,不成功啊?

wesleyluo 2011-03-01 10:43:29

发送一个多播包,接受回环包,然后获取发送包的IP地址等,这样就得到了本地的IP地址;

但是为什么在linux下不能通过这种方式获取本地IP呢?
有一次我给linux下的网卡添加了一个默认网关,就可以获取了,但是现在我添加了默认网关还是不能获取到本地IP地址,只能得到127.0.0.1;
哪位知道怎么回事呢?是需要路由吗?
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
haixuelang 2011-03-03
  • 打赏
  • 举报
回复
wesleyluo 2011-03-02
  • 打赏
  • 举报
回复
我调试了下代码:
发现:
1.如果不添加网关,在执行setsockopt(IP_ADD_MEMBERSHIP)这个函数时报错;
提示:No such Device;
2.如果加了网关,在本地等待多播包回送的过程中超时,也就是一直都接收不到刚才发出的多播包了.

大家说说怎么回事呢?
wesleyluo 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zjw6861982 的回复:]
这个问题我也碰到过,经研究,向255.255.255.255发送广播,linux似乎要求必须经过网关,如果网关不设,linux直接判255.255.255.255跟自己本机(和子网掩码)不在同一网段,产生Network unreachable错误。


所以没有网关,多播不会成功。

你可以通过ioctl()函数获得ifreq来获取本机地址。
[/Quote]
我同意你的看法,可奇怪的是,我现在添加了网关,本地怎么也收不到自己发出的多播包了,前段时间成功过一次,现在不行了,难道是路由网关坏了???
zjw6861982 2011-03-02
  • 打赏
  • 举报
回复
这个问题我也碰到过,经研究,向255.255.255.255发送广播,linux似乎要求必须经过网关,如果网关不设,linux直接判255.255.255.255跟自己本机(和子网掩码)不在同一网段,产生Network unreachable错误。


所以没有网关,多播不会成功。

你可以通过ioctl()函数获得ifreq来获取本机地址。
wesleyluo 2011-03-02
  • 打赏
  • 举报
回复
我就是要通过多播的方式获取啊.ifconfig实现不一样.
zjw6861982 2011-03-02
  • 打赏
  • 举报
回复
IP_MULTICAST_LOOP这个选项呢
playmud 2011-03-02
  • 打赏
  • 举报
回复
看看网关是否设置屏蔽多播的包了
wangtingguang 2011-03-01
  • 打赏
  • 举报
回复
直接ifconfig 不就看到了吗

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧