将套接字绑定到ansi c中的端口80

时间:2008-10-03 22:21:30

标签: c networking sockets webserver

当我尝试将端口80绑定到c中的套接字时,我总是收到错误,我无权使用此端口。是否有一种简单的方法来获得此权限?

9 个答案:

答案 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也很受欢迎。