相信很多人都用过类似“飞鸽传书”的局域网内聊天工具吧??打开的时候软件会对局域网内所有用户进行扫描,把在线的都列出来我想,它应该就是一开软件就对局域网上所有用户的某个端口发送消息,如果有开这个软件,它就会回复自己的ip、计算机名等信息的。但是我们学的java对一个端口发送消息等待回应,如果那台机端口关闭的话好象要等很久啊??我想问的就是:
如何快速的对整个局域网的所有计算机的某个端口扫描,辨别那个端口是否打开??
如何快速的对整个局域网的所有计算机的某个端口扫描,辨别那个端口是否打开??
解决方案 »
- JAVA基础
- 请问类类型怎么表示
- 关于反射 -- Method 类的 setAccessible 方法的作用
- 求助
- 关于jni的问题
- java开发入门还有哪些个好的网站论坛 散分
- 各位老大,我在启起动完成tomcat5.0的startup后http://localhost:8080初始页面正常,但我一点Tomcat Administration出现错误页面
- 用java写的俄罗斯方块
- 有谁知道sun jdk在那下载
- 不管按下哪个按钮都只向上运动而且初始的小球不消失,求大神指点。
- 【小测试2】写出此代码的执行结果,并解释原因
- 本人是大三学生,初学java事件处理问题,帮我看一下代码!!!!!!!!!
我说呢,我一直郁闷为什么我来一下那么慢他来一下那么快呢那么有没有谁有这样的小例子发来参考参考??
如果没有的话,也欢迎提供几个需要用到的类,我看看api doc也好,先谢谢咯
import java.io.*;
import java.net.*;
import java.util.*;
public class SocketPort {public static void main(String[] args) { String ip = "192.168.0.1";
String hostname = new String(); try{ //get the target ip address and hostname
InetAddress address = InetAddress.getByName(ip);
System.out.println(address);
hostname = address.getHostName();
System.out.println(hostname);
}
catch(UnknownHostException e){
System.out.println("Could not find "+ ip); }
try{ // creat the output file
PrintWriter fout = new PrintWriter( new FileWriter("PortInf.txt"));
fout.println("Information Of The Port On the " + hostname +"computer ");
System.out.println("Information Of The Port On the " + hostname +"computer ");
fout.println(); // do ports scan
for(int nport = 24;nport <= 60;++nport){
try{ Socket s = new Socket(hostname,nport);
fout.println("The port " + nport + " is open!");
System.out.println("The port " + nport + " is open!"); fout.println("Connected to "+ s.getInetAddress() + " on port " + s.getPort() + " from port "+ s.getLocalPort() + " of " + s.getLocalAddress());
System.out.println("Connected to "+ s.getInetAddress() + " on port " + s.getPort() + " from port "+ s.getLocalPort() + " of " + s.getLocalAddress()); //print the connected socket information
}catch(IOException e){
fout.println("The port " + nport + " is closed!");
System.out.println("The port " + nport + " is closed!");}}
fout.close();}
catch(IOException e){}}
}
虽然还没实现功能,继续摸索晚上回来结贴,有补充的继续补充哦,嘿嘿
import java.io.InputStreamReader;
import java.io.LineNumberReader;public class IPTest { public static void main(String[] args) {
String str = ""; try {
for (int i = 2; i < 254; i++) { Process p = Runtime.getRuntime().exec(
"ping 192.168.0." + i + " -w 300 -n 1");
InputStreamReader is = new InputStreamReader(p.getInputStream());
LineNumberReader lnr = new LineNumberReader(is); for (int j = 1; j < 7; j++) {
lnr.readLine(); } str = lnr.readLine();
if (str.length() < 17
|| str.substring(8, 17).equals("timed out")) {
continue;
} else {
System.out.println("192.168.0." + i);
}
} } catch (IOException e) {
e.printStackTrace();
}
}}扫描局域网内的IP地址,自己试试
记得以前弄过局域网的即时通 好像用到过·
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.PortUnreachableException;
import java.net.SocketException;
import java.net.SocketTimeoutException;
public class ClientFinder { private static final int PORT = 6789;
private static final String REQ_MSG = "HI";
private static final String RES_MSG = "OK";
private static byte[] REQ_DATA = null;
private static byte[] RES_DATA = null; static {
try {
REQ_DATA = REQ_MSG.getBytes("UTF-8");
RES_DATA = RES_MSG.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
System.exit(1);
}
} public static class Listener implements Runnable { private static final int BUF_SIZE = 100;
private final DatagramSocket ds; public Listener(DatagramSocket ds) {
if (ds == null) throw new IllegalArgumentException("ds is null");
this.ds = ds;
} public void run() {
DatagramPacket dp = new DatagramPacket(new byte[BUF_SIZE], 0, BUF_SIZE);
try {
while (true) {
try {
this.ds.receive(dp);
InetAddress ipa = dp.getAddress();
String msg = new String(
dp.getData(),
dp.getOffset(),
dp.getLength(),
"UTF-8"
);
if (REQ_MSG.equals(msg)) {
this.ds.send(new DatagramPacket(
RES_DATA, 0, RES_DATA.length,
dp.getAddress(), dp.getPort()
));
} else if (RES_MSG.equals(msg)) {
System.out.println(ipa + " > " + msg);
} else {
}
} catch (SocketTimeoutException e) {
} catch (PortUnreachableException e) {
} catch (SocketException e) {
throw e;
} catch (IOException e) {
}
}
} catch (SocketException e) {
}
} }
public static class Sender implements Runnable { private final DatagramSocket ds; public Sender(DatagramSocket ds) {
if (ds == null) throw new IllegalArgumentException("ds is null");
this.ds = ds;
} public void run() {
try {
this.ds.send(new DatagramPacket(
REQ_DATA, 0, REQ_DATA.length,
new InetSocketAddress("255.255.255.255", PORT)
));
} catch (PortUnreachableException e) {
} catch (SocketException e) {
} catch (IOException e) {
}
} }
public static void main(String[] args) {
DatagramSocket dgskt = null;
try {
dgskt = new DatagramSocket(PORT);
new Thread(new Listener(dgskt)).start();
new Thread(new Sender(dgskt)).start();
} catch (SocketException e) {
e.printStackTrace();
} finally {
if (dgskt != null) {
//dgskt.close();
}
}
}}