我想制作一个没有任何库的简单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
如果索蒙可以帮助我,那将是很棒的。