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

当我尝试将端口80绑定到c中的套接字时,我总是得到错误,我没有权限使用此端口。 获得此许可有简单的方法吗?

通常只有超级用户(root)才能绑定到“特权”端口(即1024以下的端口号)。

这意味着您必须以root身份运行程序或将可执行文件设置为“suid root”。

这两者都有安全性后果,因此您可能需要考虑使用suid方法并在完成绑定调用后放弃超级用户权限。

您会发现本教程对使用C / C ++进行网络编程非常有帮助。

顺便说一句, ANSI C无法访问网络。 它是OS提供的库(BSD套接字API,也作为winsock移植到Windows),提供此function。

端口1024及以下称为特权端口 ,绑定到这些端口需要提升权限。

1024以上的端口称为Emphemeral Ports 。 绑定到这些不需要特殊权限。

访问特权端口的最简单方法是成为root用户。

如果您使用的是共享系统(如大学计算机)而不是root用户,那么根据设计,没有“简单”的方法可以获得该权限。

就像@Charles Bailey所说的那样……我想补充一点,这就是为什么人们常常在url上通过端口规范看到8080上的http服务器地址为http://some.url :8080 /

传统上只有root可以将套接字绑定到1024以下的端口。

S.Lott的回复可能引发了非常消极的反应,但他的想法远非愚蠢:如果最初的问题是针对真实的程序(不是学校作业),那么将其作为HTTP服务器后面的应用程序开发通常是一个合理的选择。 这样,你可以将大量的低级细节留给一个好的,经过良好调试的程序Apache。

应用程序不必是CGI,它可以是Apache模块。 从版本2开始,Apache不再只是一个HTTP服务器。 它现在是开发网络程序的平台。 编写Apache模块可能是原始问题的正确答案(请参阅Apache文档 )

普通程序无法绑定“特权”端口 – 低于1024的端口。这是类UNIX操作系统的一个主要过时的安全function。

以超级用户身份运行,虽然这里有许多其他用户建议,但这个问题的解决方案很糟糕。 如果您在Debian或Ubuntu系统上运行,我建议安装authbind软件包,这将允许您授予程序打开特权端口的权限,而无需为程序提供任何其他特殊权限。

如果你在任何其他系统上运行,我建议安装debian或ubuntu ;-)。

是的,您可以轻松绑定到端口80.使用Apache。 编写Web应用程序。 Apache绑定到端口80并运行您的Web应用程序。

你想写下一个Apache吗? 如果是这样,您需要了解操作系统中的setuid API调用。

如果您没有编写新版本的Apache,大多数人都使用非特权端口。 8000很受欢迎,8080也很受欢迎。