`
sbl2255
  • 浏览: 218287 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

网络发现之Thread_Ping

    博客分类:
  • jdk
 
阅读更多
public List<Device> devices = new Vector();

	public static void main(String[] args) throws IOException,
			InterruptedException {
		Test test = new Test();
		List<Device> rs = test.searchDevice();
	}

	public List<Device> searchDevice() {
		List<String> ips = IPUtils.getIPByNet("10.10.10");
		ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 5,TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>());
		Iterator<String> it = ips.iterator();
		while (it.hasNext()) {
			String ip = it.next();
			executor.execute(new IPTask(devices, ip));
		}
		return devices;
	}

 

 

public class IPTask implements Runnable {

	List<Device> devList;
	String ip;
	SearchDeviceService search;

	public IPTask(List<Device> devList, String ip) {
		this.devList = devList;
		this.ip = ip;
		search = SearchDeviceService.getInstance();
	}

	@Override
	public void run() {
		Device tmp = search.Ping(ip);
		if (tmp != null) {
			synchronized (devList) {
				if (!devList.contains(tmp)) {
					System.out.println(Thread.currentThread().getId() + "  " + tmp.toString());
					devList.add(tmp);
				}
			}
		}
	}
}

 

 

public class SearchDeviceService {

	private static SearchDeviceService instance;

	public static SearchDeviceService getInstance() {
		if (instance == null) {
			return new SearchDeviceService();
		}
		return instance;
	}

	public Device Snmp(String ip) {
		Device info = new Device();
		Address targetAddress = GenericAddress.parse("udp:" + ip + "/161");
		CommunityTarget target = new CommunityTarget();
		target.setCommunity(new OctetString(Config.COMMUNITY));
		target.setAddress(targetAddress);
		target.setRetries(Config.RETRIES);
		target.setVersion(SnmpConstants.version2c);
		PDU pdu = new PDU();
		pdu.add(new VariableBinding(new OID(SNMP.WINDOW_HOSTNAME)));
		try {
			ResponseEvent event = SNMP.getInstance().get(pdu, target);
			if (event != null && event.getResponse() != null) {
				Object localObject = event.getResponse().getVariableBindings();
				for (int j = 0; j < ((Vector) localObject).size(); j++) {
					VariableBinding recVB = (VariableBinding) ((Vector) localObject).elementAt(j);
					info.setDeviceName(recVB.getVariable().toString());
					info.setDeviceIP(ip);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return info;
	}

	public Device Ping(String ip) {
		Device info = null;
		try {
			Runtime run = Runtime.getRuntime();
			Process localProcess = run.exec("ping -n 2 -w 1000 " + ip);
			BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(localProcess.getInputStream()));
			String str2 = localBufferedReader.readLine();
			while (str2 != null) {
				if (str2.toUpperCase().contains("TTL=")) {
					InetAddress host = InetAddress.getByName(ip);
					info = new Device();
					info.setDeviceName(host.getCanonicalHostName());
					info.setDeviceIP(ip);
				}
				str2 = localBufferedReader.readLine();
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return info;
	}
}

执行结果:

9  IP:10.10.10.1,name:10.10.10.1
9  IP:10.10.10.30,name:NPIE353B1
10  IP:10.10.10.150,name:ljw-PC
12  IP:10.10.10.153,name:Fisrt-PC
13  IP:10.10.10.165,name:10.10.10.165
11  IP:10.10.10.189,name:10.10.10.189
9  IP:10.10.10.190,name:10.10.10.190
13  IP:10.10.10.196,name:10.10.10.196
9  IP:10.10.10.199,name:PC-20130710QYPU
11  IP:10.10.10.201,name:10.10.10.201
12  IP:10.10.10.202,name:10.10.10.202
12  IP:10.10.10.210,name:10.10.10.210
11  IP:10.10.10.208,name:10.10.10.208
13  IP:10.10.10.212,name:10.10.10.212
9  IP:10.10.10.216,name:10.10.10.216
10  IP:10.10.10.234,name:10.10.10.234
11  IP:10.10.10.231,name:10.10.10.231
9  IP:10.10.10.243,name:10.10.10.243
13  IP:10.10.10.255,name:10.10.10.255
9  IP:10.10.10.253,name:10.10.10.253

 

 

 

 

首先创建一个Vector容器,存放数据,然后通过ThreadPoolExector创建线程管理;具体工作由IPTask开始;

Iptask中,负责接收当前要操作的ip信息,多线程,synchronized当然是必须的;

在service中,runtime执行ping命令,然后得到结果……

 

 

 

 

 

 

分享到:
评论

相关推荐

    ping_thread_class.zip_WORKING_delphi ping_ping

    标题 "ping_thread_class.zip_WORKING_delphi ping_ping" 暗示了这是一个关于 Delphi 开发的网络组件,特别用于实现"Ping"功能。Ping 是一个网络诊断工具,用于检查网络连接是否可达,通常通过发送ICMP(Internet ...

    TX_H743_NETX_PING_OK.zip

    标题“TX_H743_NETX_PING_OK.zip”表明这是一个与嵌入式系统相关的压缩文件,其中包含了针对STM32H743处理器、LAN8720以太网控制器以及ThreadX实时操作系统和NetX Duo网络协议栈的开发资源。这个工程可能是一个完整...

    Mult-ping.rar_VB程序Ping_ping_vb ping _vb 多线程_vb多线程

    标题中的“Mult-ping.rar_VB程序Ping_ping_vb 多线程_vb多线程”揭示了这个压缩包文件包含了一个使用Visual Basic (VB)编程语言编写的程序,该程序实现了多线程的ping功能。多线程是并发处理多个任务的能力,这在...

    多线程ping

    thread = threading.Thread(target=ping_ip, args=(ip,)) threads.append(thread) thread.start() for thread in threads: thread.join() print("所有ping操作已完成") ``` 以上代码创建了两个线程,分别ping...

    ping_java_android_

    【标题】"ping_java_android_" 暗示我们讨论的是一个与Java和Android相关的项目,可能是一个应用或库,用于实现网络通信功能,特别是“ping”操作,这通常用于检查网络连接的可用性。 在Android平台上,Java是主要...

    android ping 网络

    在Android平台上进行网络诊断时,"ping"命令是不可或缺的工具。它允许开发者或用户测试设备与特定IP地址之间的连通性,通过发送Internet控制消息协议(ICMP)回显请求来检查网络延迟和丢包情况。以下是关于"android ...

    Python实现快速多线程ping的方法

    本示例讲解了如何利用Python的多线程功能来快速地对多个IP地址进行ping操作,以检查网络连通性。这个程序使用了`pexpect`库来执行系统命令,并通过`threading`库创建线程,实现并行ping。 首先,我们导入了所需的库...

    stm32f4 discovery RT-Thread 基于Enc28j60网络程序

    - 测试网络连接,如通过ping命令检查STM32F4 Discovery开发板与计算机之间的网络连通性。 这个项目为初学者提供了一个实践网络通信的完整实例,有助于提升对嵌入式系统、实时操作系统和网络编程的理解。通过深入...

    stm32cube+lwip无法PING通,解决思路

    - 使用STM32CubeMX生成带系统的Lwip工程后,尝试使用Wireshark抓包工具进行调试,发现无法Ping通。 2. **配置细节**: - 在不使用FreeRTOS的情况下,只需在`main`函数的`while(1)`循环中加入`MX_LWIP_Process();`...

    qt5多线程pingIP地址(线程池)

    总的来说,"qt5多线程pingIP地址(线程池)"是一个结合了Qt5的多线程、线程池管理以及外部工具fping的实用应用程序,旨在高效地检查大量IP地址的网络连通性。通过合理的设计和实现,可以显著提升网络诊断的效率。

    RT-Thread LWIP 网速测试

    4. **Ping测试**:使用ping命令检查到远程主机的延迟,可以评估网络的响应时间。 5. **iperf工具**:iperf是一个通用的网络性能测试工具,支持TCP和UDP,可以在RT-Thread中移植使用,进行更详细的网速测试。 五、...

    rt_thread_stm32_enc28j60.rar

    标题“rt_thread_stm32_enc28j60.rar”指的是一个针对STM32微控制器使用RT-Thread操作系统,并集成ENC28J60网络接口芯片的项目压缩包。这个压缩包可能包含了源代码、配置文件和其他相关资源,帮助开发者实现通过ENC...

    使用Python实现批量ping操作方法

    t = threading.Thread(target=ping_IP, args=(IP_L,)) threads.append(t) for i in range(THREAD_NUM): threads[i].start() for i in range(THREAD_NUM): threads[i].join() ``` 上述代码首先根据用户输入确定...

    win-PingTest_Windows编程_

    在Windows编程领域,开发一个网络ping测试程序是常见的任务,用于检查网络连通性。"win-PingTest"项目提供了一个实用工具,帮助用户轻松测试多个网络节点的可达性。这个程序利用了Windows操作系统内建的ICMP...

    STM32H750移植rt-thread操作系统完整工程.zip

    它提供了一个轻量级内核,支持多线程、内存管理、定时器、中断服务等核心功能,同时也包含丰富的组件库,如网络协议栈、文件系统、图形用户界面等,为开发者提供了灵活的软件平台。 移植rt-thread到STM32H750的过程...

    自动ping 网关程序

    标题中的“自动ping网关程序”是指一种计算机应用程序,它能够自动执行ping命令来检查网络连接的稳定性,尤其是针对网关设备。网关是网络通信中的一个重要节点,它连接了两个不同的网络,使得数据能在这些网络之间...

    java实现ping.pdf

    标题“java实现ping.pdf”表明本文档内容与Java编程语言相关,特别是描述了一个实现网络诊断工具“ping”的Java程序。Ping工具主要用于测试数据包是否能够通过网络到达特定的主机,并测量往返时间(Round-Trip Time,...

    网络连通检测ping.7z

    这个压缩包"ping.7z"包含了一个C++实现的ping功能,为开发者提供了一种自定义网络连通性检测的方法。 首先,我们要理解C++编程语言在实现网络通信中的角色。C++是一种静态类型的、编译式的、通用的、大小写敏感的、...

    用c#写的多线程PING的程序

    在IT行业中,网络通信是不可或缺的一部分,而`ping`命令是一种简单却强大的网络诊断工具,用于测试网络连接的可达性和速度。在这个项目中,我们讨论的是一个使用C#编程语言实现的多线程`ping`程序,它可以同时对多个...

Global site tag (gtag.js) - Google Analytics