0

我想制作一个没有任何库的简单跟踪路由。

在 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

如果有人能帮助我,那就太好了。

4

0 回答 0