我想在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
非常感谢!
答案 0 :(得分:8)
Ruby 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"
答案 1 :(得分: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地址不通过非本地网络传输。