5

我想在 Ruby 的 TCPServer 中获取客户端的 IP 地址。和(如果可能的话)MAC 地址。

例如,Ruby 中的时间服务器,请参阅评论。

tcpserver = TCPServer.new("", 80)
if tcpserver
 puts "Listening"
 loop do
  socket = tcpserver.accept
  if socket
   Thread.new do
    puts "Connected from" + # HERE! How can i get the IP Address from the client?
    socket.write(Time.now.to_s)
    socket.close
   end
  end
 end
end

非常感谢!

4

2 回答 2

8

红宝石 1.8.7:

>> fam, port, *addr = socket.getpeername.unpack('nnC4')
=> [4098, 80, 209, 191, 122, 70]
>> addr
=> [209, 191, 122, 70]
>> addr.join('.')
=> "209.191.122.70"

Ruby 1.9 使它更简单一些:

>> port, ip = Socket.unpack_sockaddr_in(socket.getpeername)
=> [80, "209.191.122.70"]
>> ip
=> "209.191.122.70"
于 2010-04-20T05:16:45.423 回答
5

使用socket.addr

irb(main):011:0> socket.addr
=> ["AF_INET", 50000, "localhost", "127.0.0.1"]

它返回一个显示套接字类型、端口和主机信息的数组。

关于查找 MAC 地址,我不知道它是内置的。如果您想要本地 MAC 地址,可以使用 Ara Howard 的“macaddr”gem。如果需要远程 MAC 地址,可以使用命令行arp程序并解析其输出。请注意,这仅在远程计算机位于同一本地网络上时才有效,因为 MAC 地址不会跨非本地网络传输。

于 2009-08-16T11:52:02.653 回答