Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In TCPServer (Ruby) how can i get the IP/MAC from the client?

i want to get the IP Address of the client in a TCPServer in Ruby. And (if it is possible) the MAC Address.

For example, a Time Server in Ruby, see the comment.

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

Thank you very much!

like image 304
a0rtega Avatar asked Aug 16 '09 11:08

a0rtega


1 Answers

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 makes it a little more straightforward:

>> port, ip = Socket.unpack_sockaddr_in(socket.getpeername)
=> [80, "209.191.122.70"]
>> ip
=> "209.191.122.70"
like image 192
Eric Dennis Avatar answered Sep 30 '22 15:09

Eric Dennis