检查正在使用的端口

时间:2011-02-10 01:07:13

标签: java port

如何检查某个端口是否有运行某个IP地址的服务。 (请用java代码)

编辑:我的教授问:“每次程序发现正在运行的服务时,都必须打印消息”。从那以后,我想他想让我找出正在使用的端口。但是,我再次问他。他告诉我,我只需要检测一个免费(未使用)的端口。

所以,我认为我解决了我的问题。 谢谢你的帮助。

5 个答案:

答案 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程序从远程计算机获取端口信息,那么祝您好运。您可以尝试连接到不同的端口并检查哪些端口拒绝连接..但这是一个糟糕的主意。