Какие причины являются причиной потери пакета? - PullRequest
0 голосов
/ 09 апреля 2020

Я новичок в python. Я кодировал инструмент ping. Во-первых, я выполнил его с 22 mask. Затем он работает нормально. После этого я выполнил его с 16 mask.but, я распознал потерю пакета (используя Wireshark). Я не менял время ожидания. И моя скорость inte rnet выше, чем скорость отправки пакетов (я рассчитал это). Каковы причины потери пакетов и Как уменьшить потерю пакетов?

#!/usr/local/bin/python3
import socket
from multiprocessing import Process
from time import sleep
def sender(ip):
        s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
        for y in ip:
             s.sendto(bytes.fromhex('08004d05000100566162636465666768696a6b6c6d6e6f7071727374757677616263646566676869'),(y,socket.IPPROTO_ICMP))
             sleep(0.001)
        s.close()

def sniffer(so):
    i=0
    while True:
      c=so.recvfrom(1024)
      if c[0].hex()[40:44]=='0000':
            print(c[1][0])
            i=i+1
            print(i)

ip=input("IP :")
mask=int(input("Mask :"))
ip_parts=ip.split('.')
hosts_h=32-mask
hosts=(2**hosts_h)-2
ip_pb=[]
ip_pb.append(format(int(ip_parts[0]), '08b'))
ip_pb.append(format(int(ip_parts[1]), '08b'))
ip_pb.append(format(int(ip_parts[2]), '08b'))
ip_pb.append(format(int(ip_parts[3]), '08b'))
ip_b=str(ip_pb[0])+str(ip_pb[1])+str(ip_pb[2])+str(ip_pb[3])
network_bits=ip_b[0:mask]
ip_re=[]
i=1
while i <= hosts:
   ip_r=str(network_bits)+str(format(i, '0'+str(hosts_h)+'b'))
   ip_re.append(str(int(ip_r[0:8],2))+"."+str(int(ip_r[8:16],2))+"."+str(int(ip_r[16:24],2))+"."+str(int(ip_r[24:32],2)))
   i=i+1


if __name__ == '__main__':
    so = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
    p1 = Process(target=sniffer,args=(so,))
    p1.start()
    p2 = Process(target=sender,args=(ip_re,))
    p2.start()
    p1.join(200)
    p2.join()
    if p1.is_alive():
       p1.terminate()
       p1.join()
       so.close()
...