如何检查某个端口是否有运行某个IP地址的服务。 (请用java代码)
编辑:我的教授问:“每次程序发现正在运行的服务时,都必须打印消息”。从那以后,我想他想让我找出正在使用的端口。但是,我再次问他。他告诉我,我只需要检测一个免费(未使用)的端口。
所以,我认为我解决了我的问题。 谢谢你的帮助。
答案 0 :(得分:1)
InetAddress addr = InetAddress.getByName("hostName");
Socket socket = new Socket(addr, 8090);
热门/试用的想法是尝试不同的端口。如果上面的代码片段没有抛出异常,那么主机正在接受该端口上的连接。如果不是,您将看到异常,通常是ConnectException。 我并不是说这是一个理想的方式,但它只是一种选择。
答案 1 :(得分:1)
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文件并返回端口号。
答案 2 :(得分:0)
尝试在命令提示符中使用netstat命令。您可以键入netstat -h来查看帮助,但似乎netstat -b将显示正在运行的进程。
答案 3 :(得分:0)
您要么必须从java或端口扫描中执行命令行参数(如netstat)。端口扫描还将检测即使不使用也无法监听的端口。例如,除非您是root用户,否则您的系统可能会禁用端口443。
类似的东西:
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);
}
}
答案 4 :(得分:0)
如果您的意思是在计算机上运行Java程序来检查计算机的端口可用性,请查看此内容。
Checking port availability in Java
如果您的意思是使用Java程序从远程计算机获取端口信息,那么祝您好运。您可以尝试连接到不同的端口并检查哪些端口拒绝连接..但这是一个糟糕的主意。