当前位置: 技术问答>linux和unix
linux编程:求助各位linux牛人,检测一个IP是否连通,用什么实现好
来源: 互联网 发布时间:2017-04-23
本文导语: linux编程:求助各位linux牛人,检测一个IP是否连通,用什么实现好? linux下C/C++编程,现在要实现一个功能,就是给定一个IP地址,看是否连通。原来的方案是system(ping )来检测,但是很多机器有可能把ping禁止了,...
linux编程:求助各位linux牛人,检测一个IP是否连通,用什么实现好?
linux下C/C++编程,现在要实现一个功能,就是给定一个IP地址,看是否连通。原来的方案是system(ping )来检测,但是很多机器有可能把ping禁止了,所以这个方案不行。求教各位达人有什么其它好的办法编程实现呢?
谢谢!!
linux下C/C++编程,现在要实现一个功能,就是给定一个IP地址,看是否连通。原来的方案是system(ping )来检测,但是很多机器有可能把ping禁止了,所以这个方案不行。求教各位达人有什么其它好的办法编程实现呢?
谢谢!!
|
那能有什么办法。要想有回应除了ICMP这样确定的协议以外,至少得用tcp吧。而TCP你就得知道确定的端口,问题是除了ICMP还有什么确定的通用的,公开的端口么?
所以你杯具了。
所以你杯具了。
|
每个端口遍历bind它 connect它
看它还通不通 哈哈
看它还通不通 哈哈
|
总得有一个端口用来检测
telnet ip port
telnet ip port
|
基本无解~!
|
可以让对方开个端口专门用来检测嘛
|
从0到65535端口,一个一个发送数据,一个一个试。
|
这个真没什么好办法吧,现在服务器端的安全防范尤其强,不会让你随意扫描端口的。
|
基本无解~!
|
首先
去测试一个有ip的connect速度,再测试一个无ip的connect拒绝速度
有IP的connect回绝是从目的台式机回的,无IP的,最近的路由器或交换机回的,速度上会不一致
tcp 去connect 一个端口(随便选) ,根据之前的速度值来判定 //哈哈,只是猜测
去测试一个有ip的connect速度,再测试一个无ip的connect拒绝速度
有IP的connect回绝是从目的台式机回的,无IP的,最近的路由器或交换机回的,速度上会不一致
tcp 去connect 一个端口(随便选) ,根据之前的速度值来判定 //哈哈,只是猜测
|
3楼的兄弟说的有道理,小弟也认为只有ICMP协议好用
|
正解 不然就遍历 汗
|
考虑telnet 需要知道端口号不过
|
检测是否“连通”的目的是什么,肯定是为了对接下来进一步的网络操作进行判断,接下来要操作的端口是确定的,所以“联通”的标准应该精确到该端口,否则,如果目标地址能ping通,但是该端口不通,对于你的应用来说,同样视为是“不通”的,反之亦然,所以,在这个前提下,telnet检测即可
|
如果在同一个LAN里,发ARP包.
如果在WAN里,扫描端口或者ping, 如果禁用了ping,关闭了所有的upd和tcp端口,那莫有办法了.
|
他把所有的端口都关了不是也把自己也封死了。。。
|
说的很对
|
可以考虑一下类似 tracert 的机制,对方机器开还是不开,他所在局域网的网关是知道的,有时是可以探测出来的.
|
还是ICMP方法,对指定IP发送一个UDP包,随意端口,等待一定时间一般会回复一个ICMP,会告诉你是目标不可达还是端口不可达,端口不可达就是存在此IP的机器。不过很多时候根本收不到回复,需要多尝试。
如果是内网就直接使用arp协议。
如果是内网就直接使用arp协议。
|
先bind然后connect
|
可以参考 nmap 的做法和源代码
http://nmap.org/book/man-port-scanning-techniques.html
http://nmap.org/book/man-port-scanning-techniques.html