高性能的java的ip资源扫描和端口分析
在网管的设计中,经常要对ip资源进行扫描,来确定ip资源使用情况和历史的活跃ip。传统的办法就是对路由交换的fdb和arp的数据进行分析,然后得出ip的资源信息。但是在经常的情况。
但是很多分析一个ip段的数据,有时候因为网络的复杂,无法准确取到ip相关信息,造成ip资源扫描的误差。这里我们主要介绍2个算法,都是通过多线程来扫描一个网段的ip资源和一个设备的端口资源。
核心的分析类的源代码:
package com.shine.NetAnalisys;import java.util.List;import com.shine.NetAnalisys.model.NetAnalyzeCallBack;
import com.shine.NetAnalisys.threadModel.NetPortThreadModel;
import com.shine.NetAnalisys.threadModel.NetScanThreadModel;
import com.shine.NetAnalisys.util.NetWorkUtil;
import com.shine.framework.ThreadPoolUtil.ThreadPoolManager;
import com.shine.framework.ThreadPoolUtil.util.SuperThread;/*** 网络分析类库 主要包括ip扫描,端口分析* * @author viruscodecn@gmail.com* */
public class NetAnalisysManager {private static NetAnalisysManager manager = null;private int netScanSize = 10;private int netPortSize = 10;public static NetAnalisysManager getManager() {if (manager == null)manager = new NetAnalisysManager();return manager;}public void initThreadModel() {initNetScanThreadModel();initNetPortThreadModel();}public void initNetScanThreadModel() {for (int i = 0; i < netScanSize; i++) {addNetScanThreadModel(i);}ThreadPoolManager.getManager().startThreadPool();}public void initNetPortThreadModel() {for (int i = 0; i < netPortSize; i++) {addNetPortThreadModel(i);}ThreadPoolManager.getManager().startThreadPool();}private void addNetScanThreadModel(int i) {NetScanThreadModel threadModel = new NetScanThreadModel();threadModel.setThreadName("netScanThreadModel" + i);ThreadPoolManager.getManager().addThread(threadModel);threadModel = null;}private void addNetPortThreadModel(int i) {NetPortThreadModel threadModel = new NetPortThreadModel();threadModel.setThreadName("netPortThreadModel" + i);ThreadPoolManager.getManager().addThread(threadModel);threadModel = null;}/*** 开始执行网络扫描* * @param startIp* @param endIp* @param callback* @param methodName*/public void startNetScan(String startIp, String endIp,NetAnalyzeCallBack callback, String methodName) {List<String[]> ipRangeList = NetWorkUtil.seperateIpRange(startIp,endIp, 2);int index = 0;callback.setAnalyzeFinished(false);long firstTime = System.currentTimeMillis();while (index < ipRangeList.size()) {// 获取空闲线程,如果线程繁忙则等待SuperThread theThread = ThreadPoolManager.getManager().getIdleThread("netScanThreadModel");if (theThread != null) {NetScanThreadModel netScanModel = (NetScanThreadModel) theThread.getThreadModel();if (netScanModel.getObject() == null) {netScanModel.setObject(callback);}netScanModel.setMethodName(methodName);theThread.setValues(ipRangeList.get(index));index++;} else {try {Thread.sleep(500);} catch (InterruptedException e) {}}}while (ThreadPoolManager.getManager().getIdleThreadSize("netScanThreadModel") != this.netScanSize) {try {Thread.sleep(500);} catch (InterruptedException e) {}}callback.setAnalyzeFinished(true);long passTime = System.currentTimeMillis() - firstTime;// System.out.println("执行所需时间:" + passTime);// ThreadPoolManager.getManager().stopThreadPool();}/*** 开始执行端口扫描* * @param ip* @param minPort* @param maxPort* @param callback* @param methodName*/public void startNetPort(String ip, int minPort, int maxPort,NetAnalyzeCallBack callback, String methodName) {List<String[]> ipPortList = NetWorkUtil.seperateIpPort(ip, minPort,maxPort);int index = 0;callback.setAnalyzeFinished(false);while (index < ipPortList.size()) {// 获取空闲线程,如果线程繁忙则等待SuperThread theThread = ThreadPoolManager.getManager().getIdleThread("netPortThreadModel");if (theThread != null) {NetPortThreadModel netPortModel = (NetPortThreadModel) theThread.getThreadModel();netPortModel.setObject(callback);netPortModel.setMethodName(methodName);theThread.setValues(ipPortList.get(index));index++;} else {try {Thread.sleep(1000);} catch (InterruptedException e) {}}}callback.setAnalyzeFinished(true);}public void stopNetScanThread() {ThreadPoolManager.getManager().stopThreadPool("netScanThreadModel");}public void stopNetPortThread() {ThreadPoolManager.getManager().stopThreadPool("netPortThreadModel");}public int getNetScanSize() {return netScanSize;}public void setNetScanSize(int netScanSize) {this.netScanSize = netScanSize;}public int getNetPortSize() {return netPortSize;}public void setNetPortSize(int netPortSize) {this.netPortSize = netPortSize;}
}
调用的例子,ip段扫描:
package com.shine.NetAnalisys;import com.shine.NetAnalisys.model.NetPortCallBack;
import com.shine.NetAnalisys.model.NetScanCallBack;public class Example {public static void main(String args[]) {NetAnalisysManager.getManager().setNetScanSize(10);NetAnalisysManager.getManager().initThreadModel();long curTime = System.currentTimeMillis();NetScanCallBack callback = new NetScanCallBack();NetAnalisysManager.getManager().startNetScan("192.168.11.1", "192.168.11.255", callback, "callback");for (String ip : callback.getIpList()) {System.out.println("接收IP" + ip + "可ping通");}System.out.println("执行时间" + (System.currentTimeMillis() - curTime));}
}
调用端口扫描的代码:
package com.shine.NetAnalisys;import com.shine.NetAnalisys.model.NetPortCallBack;
import com.shine.NetAnalisys.model.NetScanCallBack;public class Example {public static void main(String args[]) {NetAnalisysManager.getManager().setNetScanSize(10);NetAnalisysManager.getManager().initThreadModel();long curTime = System.currentTimeMillis();NetScanCallBack callback = new NetScanCallBack();NetAnalisysManager.getManager().startNetScan("192.168.11.1", "192.168.11.255", callback, "callback");for (String ip : callback.getIpList()) {System.out.println("接收IP" + ip + "可ping通");}System.out.println("执行时间" + (System.currentTimeMillis() - curTime));}
}
下载的地址(jar含源代码):
http://ken-javaframeword.googlecode.com/files/javaFramework2_5_2.jar
svn地址:http://code.google.com/p/ken-javaframeword/
全部代码请参照svn,上面代码只能导入jar包后执行
高性能的java的ip资源扫描和端口分析相关推荐
- Java 局域网IP地址扫描
Java扫描局域网地址主要通过CMD命令,主要通过Runtime和Process类,由于同一局域网下的IP地址比较多需要通过Java的多线程来扫描端口. import java.io.Buffered ...
- java udp ip端口 设置_UDP端口扫描Java只找到1个开放的UDP端口
我对端口扫描有一个分歧.我在 Java中扫描一些IP地址的UDP端口.在我的程序中(假设一切正常)我只能找到一个开放的UDP端口.在另一方面端口扫描"nmap"我得到4个开放的UD ...
- Java TCP/IP Socket 编程 笔记
http://jimmee.iteye.com/blog/617110 http://jimmee.iteye.com/category/93740 Java TCP/IP Socket 编程 笔记( ...
- java通过ip地址获取相应对应的城市
发现了一比较好的本地ip对应地址的库资源文件--做一下笔记. 官方网站 https://dev.maxmind.com/geoip/geoip2/geolite2/ 这里提供了免费的库文件,还有很好的 ...
- 秒杀springboot——未来轻量级高性能的Java云原生微服务框架来啦
秒杀springboot--未来轻量级高性能的Java云原生微服务框架来啦 引子 自2003年Rod.Juergen 和 Yann开发并发布Spring项目后,J2EE 迎来了新的开始.在 2013 ...
- 使用什么协议扫描服务器端口,通过ip地址扫描服务器端口号
通过ip地址扫描服务器端口号 内容精选 换一换 OBS Browser+是一款用于访问和管理对象存储服务的图形化工具,支持通过配置内网DNS服务器地址的方式,使在华为云上的Windows ECS通过内 ...
- java转换ip地址格式转换_Java编程IP地址和数字相互转换代码示例
最近才知道,将ip地址转换成十进制.八进制.十六进制同样可以访问网站. IP转为数字(第二种算法.用左移.按位或实现.效率更高.): public long ipToLong(String ipAdd ...
- 【PC工具】更新简单好用绿色IP地址扫描工具,内部网络设备查看工具,内网ip查询ip扫描工具,电脑IP地址查看方法...
玩路由器.NAS和树莓派的朋友经常需要查看内网设备ip地址.尤其是树莓派,一般情况不用桌面系统,登录SSH时候经常需要知道树莓派的ip地址.登录路由器可以查看到局域网内设备的ip地址,但很多情况下不方 ...
- apache代理时java获取IP的问题
2019独角兽企业重金招聘Python工程师标准>>> x-forwarded-for的深度挖掘 如今利用nginx做负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的 ...
- Java官方相关资源文件的获取教程
Java官方相关资源文件的获取教程 说明 类库源文件的获取 JDK文档的下载 阅读联机API文档 Java语言和虚拟机规范:Java Language and Virtual Machine Spec ...
最新文章
- 学金融买计算机配置,我是学金融投资的计算机等级考试哪个方向对我工作有用...
- python 解决IndentationError: unexpected unindent的报错!和通用代码框架,import requests def getHTMLText(url)...的解释
- oracle存储过程生成单号,Oracle生成单据编号存储过程的实例代码
- 从单体式架构迁移到微服务架构,妈妈再也不用担心我找工作了!
- 「猜题第一篇」2019年大学生电子设计竞赛
- 万年历升级版 Calendar
- 2007年7月23日旅游
- SQL常用语句(面试必备)
- 利用anaconda 下载python所依赖的文件包
- 面向接口编程思想(的好处)
- linux命令看进程的tcp链接,Linux下查看TCP连接的状态的shell命令
- 【全局盘点】华为云政企全栈技术创新能力图谱
- 云计算厂商怎么打造自己的生态网络
- isis 网络 level 2 iih_ngspice实例介绍2--直流扫描分析
- 机器学习中数据预处理——标准化/归一化方法(scaler)
- Blender图解教程:设置参考图
- mac之强制退出程序方法
- 无人驾驶汽车的相关技术,无人驾驶相关技术知识
- Razor 一知半解
- 重庆已建成4.2万余个5G基站;山西省累计建成5G基站1.2万个
热门文章
- 人工智能笔记11 --强化学习
- wifi mouse hd for linux,wifi mouse hd客户端PC版下载_wifi mouse hd客户端PC版官方下载-太平洋下载中心...
- C语言求素数/质数最高效的方法
- 算法学习——K近邻算法
- 迈普交换机中断计算机网络,迈普3100交换机配置命令大全
- 小米便签源码分析——data包
- U盘 / 移动硬盘在 Mac 苹果电脑上无法使用问题
- (转)最大流最小割定理
- 单代号网络图计算例题_一表多图(表格/横道图/网络图)让计划编制效率提高10倍...
- python数据清洗入门教程(完整版)