<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Scapy 怎么定制 ping 包


    發現錯別字 8個月前 提問
    回答
    1
    瀏覽
    373
    請勿發布不友善或者負能量的內容。與人為善,比聰明更重要!
    回答數量: 1
    風險管理(專業級)RM/PL 高級信息系統項目管理師

    Scapy定制ping包,主要包括以下四個階段:

    • 先抑制scapy導入所出現的報錯,然后導入程序中所需要的所有數據包。
    from scapy.all import *
    
    from random import randint
    
    
    def ping_once(host):
    
        #隨機產生一個1-65535IP的id位
    
        ip_id=randint(1,65535)
    
        #隨機產生一個1-65535的icmp的id位
    
        icmp_id=randint(1,65535)
    
        #隨機產生一個1-65535的icmp的序列號
    
        icmp_seq=randint(1,65535)
    • 使用命令鑄造數據包
    packet=IP(dst=host,ttl=64,id=ip_id)/ICMP(id=icmp_id,seq=icmp_seq)/b'rootkit'
    • 把鑄造的數據包進行發送。
       ping=sr1(packet,timeout=2,verbose=False)
    
        #如果收到回復則代表ping成功,成功就以退出碼3退出(便于后續用來判斷此進程是否成功)
    
        if ping:
    
            os._exit(3)
    
    if __name__ == '__main__':
    
        ping_once(sys.argv[1])
    • 最后實現ping掃描
    #!/usr/bin/python3.4
    
    # _*_ coding=utf-8 _*_
    
    import logging
    
    logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
    
    import ipaddress
    
    import time
    
    import multiprocessing
    
    from random import randint
    
    from scapy.all import *
    
    
    #實現ping掃描的函數
    
    def ping_once(host):
    
        ip_id=randint(1,65535)
    
        icmp_id=randint(1,65535)
    
        icmp_seq=randint(1,65535)
    
        packet=IP(dst=host,ttl=64,id=ip_id)/ICMP(id=icmp_id,seq=icmp_seq)/b'rootkit'
    
        ping=sr1(packet,timeout=2,verbose=False)
    
        if ping:
    
            os._exit(3)
    
    
    #使用多進程連續調用ping_once函數,實現ping_scan
    
    def ping_scan(network):
    
        #此模塊可以將一個網絡轉換成一個個ip地址
    
        net=ipaddress.ip_network(network)
    
        ip_processes={}
    
        for ip in net:
    
            #讀取網絡中的每一個IP地址,使用str將其轉換成字符串
    
            ip_addr=str(ip)
    
            #開啟多進程,使用ping_once這個函數掃描ip_addr這個地址
    
            ping=multiprocessing.Process(target=ping_once,args=(ip_addr,))
    
            #開啟這個進程
    
            ping.start()
    
            #產生ip與進程對應的字典
    
            ip_processes[ip_addr]=ping
    
        ip_list=[]
    
        for ip,process in ip_addresses.items():
    
            if process.exitcode==3:
    
                ip_list.append(ip)
    
            else:
    
                process.terminate()
    
         return sorted(ip_list)
    
    
    if __name__ == '__main__':
    
        import time
    
        t1=time.time()
    
        active_ip=ping_scan(sys/argv[1])
    
        print("活動IP地址如下:")
    
        for ip in active_ip:
    
            print(ip)
    
        t2=time.time()
    
        print(t2-t1)

    回答所涉及的環境:聯想天逸510S、Windows 10。

    8個月前 / 評論
    亚洲 欧美 自拍 唯美 另类