使Ruby服务器在端口80上运行

时间:2009-12-18 12:39:02

标签: ruby port

我在Ruby中创建一个简单的Web服务器,它在浏览器中显示文本LOLZ。我现在有这个:

#!/usr/bin/ruby
require 'socket'

server = TCPServer.open(2000)
loop do

client = server.accept
client.puts "HTTP/1.1 200 OK\r\n"
client.puts "Content-type: text/plain\r\n"
client.puts "\r\n"
client.puts "LOLZ"
client.close

end

这可以按预期工作。但是,我希望它在端口80上工作。每当我将2000更改为80,并使用bash启动服务器时,我收到此错误:

unknown-00-25-4b-8c-b9-b3:rServe koningbaardxiv$ ./rServe.rb
    ./rServe.rb:4:in `initialize': Permission denied - bind(2) (Errno::EACCES)
        from ./rServe.rb:4:in `open'
        from ./rServe.rb:4

任何人都可以帮助我吗? 感谢

编辑:我刚才发现这适用于0到999范围内的所有端口:S

1 个答案:

答案 0 :(得分:4)

1024以下的端口是保留的(也称为众所周知的端口)。您只能以root身份访问它们。

$ sudo ./rServe.rb

来自http://www.iana.org/assignments/port-numbers

  

端口号分为三个范围:众所周知的端口,   注册端口,以及动态和/或专用端口。

     

众所周知的港口是从0到1023的那些。

来自http://www.linuxquestions.org/linux/articles/Technical/Why_can_only_root_listen_to_ports_below_1024

  

我不怪那些发明端口1024限制的人,鉴于UNIX机器在1970年代和1980年代的使用情况,它是一个自然而重要的安全功能。典型的UNIX计算机允许一群不一定完全信任的人登录并执行操作。您不希望这些不受信任的用户能够安装假装为知名服务(如telnet或ftp)的自定义守护程序,因为这可能会被用来窃取密码和其他令人讨厌的东西。

相关问题