java如何读取本机端口的信息,如开放了哪些端口,端口的连接数现在是多少? 如题,有没有第三方的包可以用
不要让我在CMD中用netstat,再载取输入这样的话换操作系统怎么办,那样违背了java的跨平台性了...
不要让我在CMD中用netstat,再载取输入
这样的话换操作系统怎么办,那样违背了java的跨平台性了 展开
这样的话换操作系统怎么办,那样违背了java的跨平台性了 展开
2个回答
展开全部
多线程扫描
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
又看到你这个问题了,上一个不是我不回,是百度不让我回,记得给你发百度消息了,没收到你的回复。
先说一下java的跨平台性
我觉得你的理解有误,java的跨平台性并不是说java的程序到那里都是好用的,而是在安装了JVM的平台上可运行。
就拿File类来说吧
File file = new File("C:\\tmp.txt");
File file = new File("/home/tmp.txt");
这就是两个平台下的不同,你怎么来保证,不做处理的情况下,换平台就好用呢?
所以用平台命令这个也是要处理,判断OS,从Java的System类中可以得到你当前的OS是什么。
所以你说的有违 java的跨平台性 我觉得是不对的。
java的跨平台性 是指那些标分准类库,而不是个人创建 的应用。
而且Java的File就不具备设置文件的属性的能力,就是因为考虑到平能的兼容性。所以放弃了这一功能。
个人创建的应用程序。要想平台兼容都是自己来做处理一些内容。
就本问题来说,如果你不想用平台命令,那可以换一个方法。
用socket类
下边是用socket来连接指定端口,来判断端口是否打开。
要注意的是如果扫描的端口过多,需要扩一下JVM内存,否则很容易因数线程创建过多堆栈溢出。
不用循环,是因为遇到没有打开的端口中,连接处理很费时,远没有线程处理来的快。
有多少个连接,这个方法还没找到。
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class ScanPort {
public static void main(String[] args) {
List result = new ArrayList();
for (int port = 1; port <= 1024; port++) {
new Scan("127.0.0.1", port, result).start();
}
}
}
class Scan extends Thread {
private String ip = null;
private int port = 0;
private List result = null;
public Scan(String ip, int port, List result) {
this.ip = ip;
this.port = port;
this.result = result;
}
public void run() {
try {
Socket socket = new Socket(ip, port);
socket.close();
result.add(port);
System.out.println(port + " -> open");
} catch (Exception e) {
System.out.println(port + " -> close");
}
}
}
先说一下java的跨平台性
我觉得你的理解有误,java的跨平台性并不是说java的程序到那里都是好用的,而是在安装了JVM的平台上可运行。
就拿File类来说吧
File file = new File("C:\\tmp.txt");
File file = new File("/home/tmp.txt");
这就是两个平台下的不同,你怎么来保证,不做处理的情况下,换平台就好用呢?
所以用平台命令这个也是要处理,判断OS,从Java的System类中可以得到你当前的OS是什么。
所以你说的有违 java的跨平台性 我觉得是不对的。
java的跨平台性 是指那些标分准类库,而不是个人创建 的应用。
而且Java的File就不具备设置文件的属性的能力,就是因为考虑到平能的兼容性。所以放弃了这一功能。
个人创建的应用程序。要想平台兼容都是自己来做处理一些内容。
就本问题来说,如果你不想用平台命令,那可以换一个方法。
用socket类
下边是用socket来连接指定端口,来判断端口是否打开。
要注意的是如果扫描的端口过多,需要扩一下JVM内存,否则很容易因数线程创建过多堆栈溢出。
不用循环,是因为遇到没有打开的端口中,连接处理很费时,远没有线程处理来的快。
有多少个连接,这个方法还没找到。
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class ScanPort {
public static void main(String[] args) {
List result = new ArrayList();
for (int port = 1; port <= 1024; port++) {
new Scan("127.0.0.1", port, result).start();
}
}
}
class Scan extends Thread {
private String ip = null;
private int port = 0;
private List result = null;
public Scan(String ip, int port, List result) {
this.ip = ip;
this.port = port;
this.result = result;
}
public void run() {
try {
Socket socket = new Socket(ip, port);
socket.close();
result.add(port);
System.out.println(port + " -> open");
} catch (Exception e) {
System.out.println(port + " -> close");
}
}
}
追问
那如果我想知道本机的6W多个端口的连接数情况呢,各个端口的连接数是多少。
socket我知道,你这段代码只能检测本机开了什么端口。
而且我的需求更加危峻,就是每隔一个短的时间(例如10秒)就要将所有开放了的端口和端口的连接数多少返回给程序。不断循环
追答
有多少个连接,这个方法还没找到。
------------------------------------------------------------------------------
而且我的需求更加危峻,就是每隔一个短的时间(例如10秒)就要将所有开放了的端口和端口的连接数多少返回给程序。不断循环
这个可以做个定时任务来做处理。
------------------------------------------------------------------------------
再看看怎么看连接数
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询