如何检查哪些端口上有某个IP地址正在运行的服务。 (请用java代码)检查哪些端口正在使用
编辑:我的教授问:“每次程序发现一个正在运行的服务,它都必须打印消息”。从那以后,我以为他想让我找出哪些端口正在使用。但是,我再次问他。他告诉我,我只需要检测一个免费的(未使用)端口。
所以,我想我解决了我的问题。 感谢您的帮助。
如何检查哪些端口上有某个IP地址正在运行的服务。 (请用java代码)检查哪些端口正在使用
编辑:我的教授问:“每次程序发现一个正在运行的服务,它都必须打印消息”。从那以后,我以为他想让我找出哪些端口正在使用。但是,我再次问他。他告诉我,我只需要检测一个免费的(未使用)端口。
所以,我想我解决了我的问题。 感谢您的帮助。
尝试在命令提示符下使用netstat命令。你可以输入netstat -h来查看帮助,但看起来netstat -b会显示正在运行的进程。
您将不得不从java或端口扫描中执行命令行参数(如netstat)。端口扫描还会检测到即使不在使用中也无法侦听的端口。例如,您的系统可能会禁止端口443,除非您是root用户。
喜欢的东西:
for(int port=0; port<65536; port++)
{
try
{
new ServerSocket(port);
System.out.println("Successfully listend on port " + port);
//clean up socket here
}
catch (IOException e)
{
System.out.println("Could not listen on port " + port);
}
}
如果你的意思是一台计算机上运行的Java程序,检查计算机的端口可用性,看看这个。
Checking port availability in Java
如果你的意思是使用Java程序来获得从远程计算机端口的信息,好运气。你可以尝试连接到不同的端口,并检查哪些拒绝连接..但这是一个可怕的想法。
InetAddress addr = InetAddress.getByName("hostName");
Socket socket = new Socket(addr, 8090);
命中/试验的想法是尝试不同的端口。如果上面的代码片段没有抛出异常,那么主机正在接受该端口上的连接。如果不是,你会看到一个异常,通常是ConnectException。 我并不是说这是一个理想的解决方法,但它只是一个选择。
public int getServiceByName(String tcpipService, String tcpipClass) {
int port = -1;
try {
String line;
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(
"/etc/services")));
while (((line = br.readLine()) != null)
&& (port == -1)) {
if ((line.length() != 0)
&& (line.charAt(0) != '#')) {
port = parseServicesLine(line,
tcpipService, tcpipClass);
}
}
br.close();
return (port);
} catch (IOException ioe) {
return -1;
}
}
private int parseServicesLine(String line,
String tcpipService) {
StringTokenizer st = new
StringTokenizer(line, " \t/#");
if (! st.hasMoreTokens()) {
return -1; // error
}
String name = st.nextToken().trim();
if (! st.hasMoreTokens()) {
return -1; // error
}
String portValue = st.nextToken().trim();
// Return port number, if name on this line matches:
if (name.equals(tcpipService)) {
try {
return (Integer.parseInt(portValue));
} catch (NumberFormatException nfe) {
return -1;
}
} else {
return -1;
}
}
上面的代码片段根据服务名搜索/ etc/inet/services文件并返回端口号。
你是不是指`nmap`之类的东西? (http://nmap.org)。 – msandiford 2011-02-10 01:12:50