Skip to content

Commit cac624f

Browse files
committed
fix ping and traceroute
1 parent 40be448 commit cac624f

File tree

3 files changed

+67
-8
lines changed

3 files changed

+67
-8
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
{
2-
"python.linting.pylintEnabled": true
2+
"python.linting.pylintEnabled": true,
3+
"python.pythonPath": "/home/viewv/anaconda3/envs/DeepLearning/bin/python"
34
}

ICMP/ping.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,5 +114,7 @@ def ping(dest_addr, timeout=2, counter=10):
114114

115115

116116
if __name__ == "__main__":
117-
ping("www.baidu.com")
118-
ping('10.0.0.1')
117+
dest = sys.argv[1]
118+
ping(dest)
119+
# ping("www.baidu.com")
120+
# ping('10.0.0.1')

ICMP/traceroute.py

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,65 @@
11
# -*- coding: utf-8 - *-
2-
import os
3-
import sys
42
import socket
53
import struct
6-
import select
7-
import time
8-
import errno
4+
import sys
5+
# import io
6+
7+
8+
def trace(dest):
9+
dest_addr = socket.gethostbyname(dest)
10+
port = 23144
11+
max_jump = 30
12+
icmp = socket.getprotobyname('icmp')
13+
udp = socket.getprotobyname('udp')
14+
ttl = 1
15+
while True:
16+
recv_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
17+
send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp)
18+
send_socket.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl)
19+
20+
timeout = struct.pack("ll", 5, 0)
21+
22+
recv_socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, timeout)
23+
recv_socket.bind(("", port))
24+
print(" %d " % (ttl), end='')
25+
send_socket.sendto(bytes("", "utf-8"), (dest, port))
26+
curr_addr = None
27+
curr_name = None
28+
finished = False
29+
attemp = 3
30+
31+
while not finished and attemp > 0:
32+
try:
33+
_, curr_addr = recv_socket.recvfrom(512)
34+
finished = True
35+
curr_addr = curr_addr[0]
36+
try:
37+
curr_name = socket.gethostbyaddr(curr_addr)[0]
38+
except socket.error:
39+
curr_name = curr_addr
40+
except socket.error as error:
41+
attemp -= 1
42+
print("* ", end='')
43+
44+
send_socket.close()
45+
recv_socket.close()
46+
47+
if not finished:
48+
pass
49+
50+
if curr_addr is not None:
51+
curr_host = "%s (%s)" % (curr_name, curr_addr)
52+
else:
53+
curr_host = ""
54+
55+
print("%s" % (curr_host))
56+
# sys.stdout.write("%s\n" % (curr_host))
57+
58+
ttl += 1
59+
if curr_addr == dest_addr or ttl > max_jump:
60+
break
61+
962

63+
if __name__ == "__main__":
64+
dest = sys.argv[1]
65+
trace(dest)

0 commit comments

Comments
 (0)