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 に答える