linux ping广播地址无回应
来源:互联网 发布:mac os虚拟机性能优化 编辑:程序博客网 时间:2024/05/16 11:45
看《TCP/IP详解 卷1:协议》第12章 广播和多播 时,说ping可以直接ping广播地址。
这里想起了工作上一个挺有意思的事。因为对linux一窍不通,所以都是摸着石头过河
需求让用so做一个android局域网发现功能。
具体就是:发现所有连接到路由器的设备。就是发现所有局域网主机。并列出主机名,mac,ip等。
当时网上搜了好长时间,最后发现,这不就是arp局域网内所有ip么,有回应的就用dns得一下域名(当时认为dns也得自己弄)。所以网上搜源码搜到了这个牛逼东西:arp-scan 在这里mark一下。
结果发现,编译时要使用libpcap库,运行需要管理员权限。
方案被否了,得自己用C/C++实现。心中一万个草泥马飞过。。。
之后又搜源码,结果发现,linux的socket函数要想发arp包就得要root权限。(socket函数,第二个参数如果是SOCK_RAW或SOCK_PACKET都需要root权限)
经讨论说不能给root权限,C使用arp行不通,还是java自己ping所有ip。(心里那个暗爽啊。哈哈哈)
剩下的任务就是怎么用dns查主机名了。
又经过一顿搜啊搜,发现Unix有个库函数gethostbyaddr就是根据跟定ip地址,返回对应的主机域名。它其实就是实现了dns解析器功能。(哎,基本常识都得搜半天,没文化真可怕啊)
后来又想了下,这种通用函数android能没有封装??结果查了下发现android确实有对应java类InetAddress的getByAddress函数。
最后。。。
最后,这个需求就跟自己没啥事了。。。
所以从上面的ping局域网内所有ip(根据子网掩码算出),是否可以ping广播地址??
linux运行如下命令:
$ ping 192.168.1.255
Do you want to ping broadcast? Then -b
$ ping 192.168.1.255 -b -c 1
WARNING: pinging broadcast address
PING 1192.168.1.255 (192.168.1.255) 56(84) bytes of data.— 192.168.1.255 ping statistics —
1 packets transmitted, 0 received, 100% packet loss, time 10000ms
没有任何回应。
从baidu搜了半天,也没找出个所以然来。再次鄙视baidu和我天朝最牛B的墙。
还是自己找方法解决吧。
在该子网内的另一台机器运行tcpdump,然后再ping:
$ tcpdump -n icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
17:30:21.300465 IP 192.168.1.89 > 192.168.1.255: ICMP echo request, id 41295, seq 1, length 64
发现tcpdump机器确实收到了ping,但是没reply。
最后几经挫折,发现linux有个配置项控制是否要回应icmp的广播。
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
在使用ping就收到了该主机的回复了
$ ping 192.168.1.255 -b -c 1
WARNING: pinging broadcast address
PING 192.168.1.255 (192.168.1.255) 56(84) bytes of data.
64 bytes from 192.168.1.121: icmp_seq=1 ttl=64 time=2.11 ms— 192.168.1.255 ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 2.117/2.117/2.117/0.000 ms
最后mark一个文章:Linux网络服务参数配置说明及实战
- linux ping广播地址无回应
- ping 广播地址实现 ip范围
- ping广播地址会如何(转)
- ping广播地址个系统的反应
- ping 广播ip地址发发生的一些事情
- Linux下可ping IP地址,但是ping不通域名
- windows下ping linux的ipv6地址
- windows下ping linux的ipv6地址
- Linux地址ping不通情况怎么办?
- Linux查看网关、子网掩码、IP、广播地址
- 【Linux网络编程】广播地址介绍
- 路由器上ping 广播
- 虚拟网卡在network namespace内无法ping通广播地址
- 广播地址
- 广播地址
- 广播地址
- 广播地址
- 广播地址
- Word Press提示Fail to connect FTP server
- cocos2dx AdMob for Android
- 修改linux下的语言环境
- arm+linux系统开机自动启动带串口qt应用程序遇到open_port error: Inappropriate ioctl for device
- JS倒计时
- linux ping广播地址无回应
- 指令系统(二)算术运算指令
- HDOJ--2007
- option与option之间传值(传递多个值)
- 使用 Spring AOP控制Controller输出
- xcode7、iOS9 设置启动图片(Launch Image)
- android-view animation
- 关于网络层的封装的一点想法
- Android X轴Y轴Z轴旋转