perf: 优化 Ping 和 telnet

This commit is contained in:
ibuler
2023-02-17 19:38:34 +08:00
parent 01c2e7128d
commit dd8bc5798b
5 changed files with 64 additions and 47 deletions

View File

@@ -7,6 +7,8 @@ import socket
import struct
import time
from common.utils import lookup_domain
# From /usr/include/linux/icmp.h; your milage may vary.
ICMP_ECHO_REQUEST = 8 # Seems to be the same on Solaris.
@@ -126,24 +128,30 @@ def ping(dest_addr, timeout, psize, flag=0):
return delay
def verbose_ping(dest_addr, timeout=2, count=5, psize=64):
def verbose_ping(dest_addr, timeout=2, count=5, psize=64, display=None):
"""
Send `count' ping with `psize' size to `dest_addr' with
the given `timeout' and display the result.
"""
ip = lookup_domain(dest_addr)
if not ip:
return
if display is None:
display = print
display("PING %s (%s): 56 data bytes" % (dest_addr, ip))
for i in range(count):
print("ping %s with ..." % dest_addr, end="")
try:
delay = ping(dest_addr, timeout, psize)
except socket.gaierror as e:
print("failed. (socket error: '%s')" % str(e))
display("failed. (socket error: '%s')" % str(e))
break
if delay is None:
print("failed. (timeout within %ssec.)" % timeout)
display("Request timeout for icmp_seq %i" % i)
else:
delay = delay * 1000
print("get ping in %0.4fms" % delay)
display("64 bytes from %s: icmp_seq=0 ttl=115 time=%.3f ms" % (ip, delay))
time.sleep(1)
print()

View File

@@ -3,6 +3,8 @@
import socket
import telnetlib
from common.utils import lookup_domain
PROMPT_REGEX = r'[\<|\[](.*)[\>|\]]'
@@ -16,10 +18,29 @@ def telnet(dest_addr, port_number=23, timeout=10):
return True, output.decode('utf-8', 'ignore')
def verbose_telnet(dest_addr, port_number=23, timeout=10, display=None):
if display is None:
display = print
msg = '$ telnet %s %s' % (dest_addr, port_number)
display(msg)
ip = lookup_domain(dest_addr)
display('Trying %s...' % ip)
try:
is_connective, resp = telnet(dest_addr, port_number, timeout)
if is_connective:
template = 'Connected to {0} {1}.\r\n{2}Connection closed by foreign host.'
else:
template = 'telnet: connect to {0} {1} {2}\r\ntelnet: Unable to connect to remote host'
msg = template.format(dest_addr, port_number, resp)
except Exception as e:
msg = 'Error: %s' % e
display(msg)
if __name__ == "__main__":
print(telnet(dest_addr='1.1.1.1', port_number=2222))
print(telnet(dest_addr='baidu.com', port_number=80))
print(telnet(dest_addr='baidu.com', port_number=8080))
print(telnet(dest_addr='192.168.4.1', port_number=2222))
print(telnet(dest_addr='192.168.4.1', port_number=2223))
print(telnet(dest_addr='ssssss', port_number=-1))
print(verbose_telnet(dest_addr='1.1.1.1', port_number=2222))
print(verbose_telnet(dest_addr='baidu.com', port_number=80))
print(verbose_telnet(dest_addr='baidu.com', port_number=8080))
print(verbose_telnet(dest_addr='192.168.4.1', port_number=2222))
print(verbose_telnet(dest_addr='192.168.4.1', port_number=2223))
print(verbose_telnet(dest_addr='ssssss', port_number=-1))