2017-11-30 3 views
1

다음 코드를 사용하여 ICMP 요청을 생성하고 결과를 가져 오며 각 요청에 대한 왕복 시간을 얻습니다.Scapy에 icmp-type을 추가하면 코드가 작동하지 않습니다.

패킷 헤더에 icmp_type을 추가 할 때를 제외하고는 정상적으로 작동합니다. 내가 icmp_type을 전달하면 코드가 작동을 멈 춥니 다.

감사합니다.

def icmp_ping(host, icmp_code, icmp_type=None, count=2): 

    packet = Ether()/IP(dst=host, proto=1)/ICMP(code=icmp_code) 

    t = 0.0 
    for x in range(count): 
     ans, unans = srp(packet, iface="h1-eth0", verbose=0) 
     rx = ans[0][1] 
     tx = ans[0][0] 
     delta = rx.time - tx.sent_time 
     print "Ping:", delta * 1000 
     print packet.summary() 
     t += (delta * 1000) 
    return (t/count) 

if __name__ == "__main__": 
    for i in range(6): 
     total = icmp_ping('10.0.0.3', i) 
    print "TOTAL", total 

답변

0

ICMP 요청의 경우 코드는 0이어야하며 형식은 8이어야합니다. 프로그램에서 잘못된 값을 코드에 할당하고 있습니다. 아래 코드는 scapy의 기본 ICMP 패킷이 icmp 요청이므로 ICMP 요청을 만드는 데 충분합니다.

packet = Ether()/IP(dst=host, proto=1)/ICMP()

관련 문제