局域网扫描IP
今天有朋友去面试,被问到一个“如何扫描局域网IP”的问题(即找出局域网中当前已使用的IP),朋友回答的不好,回来问我,我首先想到的就是使用ping命令将局域网可分配的IP地址逐个遍历一遍,能ping通的就是已使用的。
那么基于思路,实现代码也没啥太难的,以java语言来实现。
linux下的代码:
public static boolean pingIp(String ip) {
try {
// ping -c 3 -w 100 中 ,-c 是指ping的次数 3是指ping 3次 ,-w 100
// 以秒为单位指定超时间隔,是指超时时间为12秒 ,***这和ping速度相关谨慎更改***
Process p = Runtime.getRuntime().exec("ping -c 1 -w 120 " + ip);
int status = p.waitFor(); //阻塞等待
if (status == 0) {
return true;
} else {
return false;
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return false;
}
windows下的实现:
public static boolean pingIp(String ip) {
try {
// ping -c 3 -w 100 中 ,-c 是指ping的次数 3是指ping 3次 ,-w 100
// 以秒为单位指定超时间隔,是指超时时间为12秒 ,***这和ping速度相关谨慎更改***
Process p = Runtime.getRuntime().exec("ping -n 1 -w 120 " + ip);
InputStream input = p.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
StringBuffer buffer = new StringBuffer();
String line = null;
while ((line = in.readLine()) != null) {
buffer.append(line);
}
if(buf.toString().indexOf("请求超时") != -1) {
return false;
} else {
return true;
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return false;
}
请注意,上面两种平台下的实现,是不同的,linux下的那种实现明显要比windows下的那种实现效率高,那么为什么不都采用linux下的那种实现呢?这就是java
平台的Process.waitfor()方法的实现在windows下不能按接口定义返回状态。那么为什么windows就这样呢(我是无语了),经过测试,发现window下的ping命令有自身的bug:ping中指定的参数-w是来设置ping阻塞等待时间的,但是该参数在windows完全不起作用,这也就是在windows平台下使用Process.waitfor()不能正确返回命令执行状态的原因。哎,我只能说windows太过聪明,把真相都掩盖在他的面具下面,再次鄙视windows。
附Process.waitfor()方法的说明:
Causes the current thread to wait, if necessary, until the process represented by this Process object has terminated. This method returns immediately if the subprocess has already terminated. If the subprocess has not yet terminated, the calling thread will be blocked until the subprocess exits.
- Returns:
- the exit value of the subprocess represented by this
Processobject. By convention, the value0indicates normal termination. - Throws:
- InterruptedException - if the current thread is interrupted by another thread while it is waiting, then the wait is ended and an
InterruptedExceptionis thrown.
局域网扫描IP的更多相关文章
- 通过安全策略限制局域网部分IP访问我的电脑
一旦电脑连上局域网,那么别人就容易进入自己的电脑,造成隐私被泄漏,这是我们最不愿发生的情况.因此,如果你的电脑并不需要向局域网其他用户共享资料,那么就建议采用策略,禁止局域网电脑访问自己的电脑,以保证 ...
- python局域网alive ip侦听
python局域网alive ip侦听 作者:vpoet mails:vpoet_sir@163.com 注:写着玩,欢迎copy # -*- coding: cp936 -*- # coding = ...
- CentOS7 设置局域网固定IP
题记: 在局域网内PC通常都是采用自动获取IP的方式从路由器拿到局域网IP的,每次PC启动后分配到的局域网IP都不一定相同.但是出于某些特殊的需求,例如要在局域网内做端口映射,需要将PC设置成使用固定 ...
- [原创]K8Cscan插件之Cisco思科设备扫描(IP、设备型号、主机名、Boot、硬件版本)
[原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...
- 在windows命令行批量ping局域网内IP
参考了博客园Alfred Zhao的文章<Windows平台ping测试局域网所有在用IP> 在cmd命令行运行如下命令即可: ,,) -w .%i | find "回复&quo ...
- centos系统设置局域网静态IP
---恢复内容开始--- centos系统设置局域网静态IP 很多时候,我们并不希望漏油器重启之后,自己的服务器动态的获取IP,这样很不利,因为你可能装了mysql,redis,等软件,然后需要远程去 ...
- 批量扫描IP端口程序 (适用于window&linux)
批量扫描IP端口,根据扫描IP导出IP命名的文件的结果.假设1.txt文件内容为127.0.0.1192.168.1.1然后我们获取文件内容IP进行扫描window .bat版本 :1.txt为文件名 ...
- advanced ip scanner —— 局域网下 ip 及设备的扫描
advanced ip scanner 下载地址:Advanced IP Scanner - Download Free Network Scanner. 用于扫描当前局域网下全部设备及其 ip,构建 ...
- 指定端口号,多线程扫描局域网内IP地址
小白第一次发博客,请各路大神不要喷,有错的地方还请不吝啬指教,谢谢....... 因为注释基本上已经说清楚啦,在这里就不多说什么啦,知识不够怕误人子弟 # -*- coding:utf-8 -*-im ...
随机推荐
- 为什么我们有时不用配置java环境变量?
答案都在这个图中 完毕,如果还不懂请自行查询注册表相关内容学习.
- 浅谈对TDD的看法
程序猿对TDD这个词一定不陌生.近几年比較火.英文全称Test-Driven Development,測试驱动开发. 它要求在编写某个功能的代码之前先编写測试代码,然后仅仅编写使測试通过的功能代码,通 ...
- 关于顺序磁盘IO比内存随机IO快的讨论
这个问题来源于我书中引用的一幅图: 我们从图中明显可以看某性能测试的结果表明普通机械磁盘的顺序I/O性能指标是53.2M values/s,SSD的顺序I/O性能指标是42.2M values/s,而 ...
- Bootstrap学习速查表(一) 理论基础
参考网站http://www.bootcss.com/ 第一步,起步,引入基本样式 <!-- 新 Bootstrap 核心 CSS 文件 --> <link rel="st ...
- Codeforces 467D Fedor and Essay bfs
题目链接: 题意: 给定n个单词. 以下有m个替换方式.左边的单词能变成右边的单词. 替换随意次后使得最后字母r个数最少,在r最少的情况下单词总长度最短 输出字母r的个数和单词长度. 思路: 我们觉得 ...
- JavaScript toString() 方法
注意:在JavaScript中,数字后面的"."操作符是的意义是不确定.因为它既可能是一个浮点数的标志,又可能是取一个对象的属性的运算符.但是JavaScript的解释器把他当做了 ...
- 一些编译php时的configure 参数
一些编译php时的configure 参数 ./configure –prefix=/usr/local/php php 安装目录 –with-apxs2=/usr/local/apache/bin/ ...
- Unity3D研究院编辑器之脚本设置ToolBar及脚本设置顶视图
Unity版本5.3.2 如下图所示,ToolBar就是Unity顶部的那一横条.这里的所有按钮一般情况下都得我们手动的用鼠标去点击.这篇文章我们说说如果自动操作它们 1.自动点击左边四个按钮 (拖动 ...
- 【BZOJ3696】化合物 树形DP+暴力
[BZOJ3696]化合物 Description 首长NOI惨跪,于是去念文化课了.现在,他面对一道化学题. 这题的来源是因为在一个奇怪的学校两个化竞党在玩一个奇怪的博弈论游戏.这个游戏很蛋疼 ...
- OpenFileDialog对话框Filter属性(转)
OpenFileDialog对话框的Filter属性说明: 首先说明一个示例,分析一下Filter属性的构成:“ Excel文件|*.xls ”,前面的“Excel文件”成为标签,是一个可读的字符串, ...