当我尝试将端口80绑定到c中的套接字时,我总是收到错误,我无权使用此端口。是否有一种简单的方法来获得此权限?
答案 0 :(得分:17)
通常只有超级用户(root)才能绑定到“特权”端口(即1024以下的端口号)。
这意味着您必须以root身份运行程序或将可执行文件设置为“suid root”。
这两个都有安全后果,因此您可能需要考虑使用suid方法并在进行绑定调用后放弃超级用户权限。
答案 1 :(得分:4)
您会发现this tutorial对使用C / C ++进行网络编程非常有帮助。
顺便说一句, ANSI C 无法访问网络。它是OS提供的库(BSD套接字API,也作为winsock
移植到Windows),提供此功能。
答案 2 :(得分:3)
端口1024及以下称为特权端口,绑定到这些端口需要提升权限。
1024以上的端口称为 Emphemeral Ports 。绑定到这些不需要特殊权限。
访问特权端口的最简单方法是成为root用户。
答案 3 :(得分:0)
如果您使用的是共享系统(如大学计算机)而不是root用户,那么根据设计,没有“简单”的方法可以获得该权限。
答案 4 :(得分:0)
就像@Charles Bailey所说的那样......我想补充一点,这就是为什么人们常常在网址上通过端口规范在8080上看到http服务器地址为http://some.url :8080 强> /
答案 5 :(得分:0)
传统上只有root可以将套接字绑定到1024以下的端口。
答案 6 :(得分:0)
S.Lott的回复可能引发了非常消极的反应,但他的想法远非愚蠢:如果原始问题是针对真实的程序(不是学校作业),那么将其作为HTTP服务器后面的应用程序开发通常是合理的选择。这样,你可以将很多低级细节留给一个好的,经过良好调试的程序,Apache。
应用程序不必是CGI,它可以是Apache模块。从版本2开始,Apache不再只是一个HTTP服务器。它现在是开发网络程序的平台。编写Apache模块可能是原始问题的正确答案(请参阅Apache documentation)
答案 7 :(得分:0)
普通程序无法绑定“特权”端口 - 低于1024的端口。这是类UNIX操作系统的一个主要过时的安全功能。
以超级用户身份运行,虽然这里有许多人提出,但对这个问题来说是一个糟糕的解决方案。如果您在Debian或Ubuntu系统上运行,我建议安装authbind软件包,这样您就可以授予程序打开特权端口的权限,而无需为程序提供任何其他特殊权限。
如果你在任何其他系统上运行,我建议安装debian或ubuntu; - )。
答案 8 :(得分:-3)
是的,您可以轻松绑定到端口80.使用Apache。编写Web应用程序。 Apache绑定到端口80并运行您的Web应用程序。
您是否正在尝试编写下一个Apache?如果是这样,您需要了解操作系统中的setuid API调用。
如果您没有编写新版本的Apache,大多数人都使用非特权端口。 8000很受欢迎,8080也很受欢迎。