gpt4 book ai didi

java - 为什么在 Java 中监听环回需要 root 权限?

转载 作者:行者123 更新时间:2023-12-01 19:13:34 26 4
gpt4 key购买 nike

为什么当我尝试用 Java 监听环回主机(使用普通的旧套接字)时,它需要 root 访问权限,但如果我使用 nio,却不需要?如果我尝试在环回上监听任何其他语言,它也不需要任何提升的权限。

这是我现在的代码:

import java.net.*;

class Test
{
public static void main( String[] args )
throws Exception
{
ServerSocket server = new ServerSocket( 80 );
while( true )
{
Socket socket = server.accept();
System.out.print( "." );
}
}
}

当我以普通用户身份运行此程序时,会引发此异常:线程“main”java.net.BindException中的异常:权限被拒绝。然而,当我以 root 身份运行它时,它按预期工作正常。

最佳答案

您需要 root 权限才能绑定(bind)端口范围 0-1023 中的套接字。这些端口用于 HTTP 和 SSH 等常见服务,允许随机用户将其任意应用程序绑定(bind)到这些端口将是危险的。

参见维基百科:http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports

编辑:请记住,任意应用程序都可以连接到众所周知的端口,但不能绑定(bind)到它们。否则用户将无法运行诚实的程序 ssh 或 mozilla。这可能就是您无法用其他语言重现此错误的原因。

关于java - 为什么在 Java 中监听环回需要 root 权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7624120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com