为什么我无法收到ICMP消息?

时间:2013-07-11 01:21:08

标签: ruby networking traceroute

我想制作一个没有任何库的简单traceroute。

在Wireshark中,我看到了传入的响应,但是我无法收到消息。 receive_socket的端口与send_socket的端口相同,指定的协议应该是正确的。

def traceroute
  local_host = '0.0.0.0'
  remote_host = '8.8.8.8'
  traceroute_port = 33434
  random_port = rand(10000..20000)

  # Create UDP-Socket
  udp_socket = UDPSocket::new
  udp_socket.bind(local_host, random_port)
  udp_socket.setsockopt( 0, Socket::IP_TTL, 3)

  # Send Data
  udp_socket.connect(remote_host, traceroute_port)
  udp_socket.send('Traceroute', 0)

  # Create Receive-Socket
  receive_socket = Socket.open(Socket::PF_INET, Socket::SOCK_RAW, Socket::IPPROTO_ICMP)
  receive_socket.bind(Socket.pack_sockaddr_in(random_port, local_host))

  # Receive Data
  begin
    p receive_socket.recvfrom(1024)
  rescue SocketError => exception
    puts exception.message
  end
end

如果索蒙可以帮助我,那将是很棒的。

0 个答案:

没有答案