zoukankan      html  css  js  c++  java
  • Python报文操作模块scapy

    pip install scapy
    -----------------------------------------------
    import scapy
    '''
    介绍:
    Scapy 是一个强大的操纵报文的交互程序。
    它可以伪造或者解析多种协议的报文,还具有发送、捕获、匹配请求和响应这些报文以及更多的功能。
    Scapy 可以轻松地做到像扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attacks)和发现网络(network discorvery)这样的传统任务。
    它可以代替hping,arpspoof,arp-sk,arping,p0f 甚至是部分的Namp,tcpdump和tshark 的功能

    '''
    -----------------------------------------------
    中文文档:https://www.ctolib.com/docs-scapy-doc-c-Introduction.html
    demo:
    from scapy.all import *
    from scapy import all
    from scapy.layers.inet import IP,ICMP
    import logging
    from random import randint
    '''
    介绍:
    Scapy 是一个强大的操纵报文的交互程序。
    它可以伪造或者解析多种协议的报文,还具有发送、捕获、匹配请求和响应这些报文以及更多的功能。
    Scapy 可以轻松地做到像扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attacks)和发现网络(network discorvery)这样的传统任务。
    它可以代替hping,arpspoof,arp-sk,arping,p0f 甚至是部分的Namp,tcpdump和tshark 的功能
    中文文档:https://www.ctolib.com/docs-scapy-doc-c-Introduction.html
    '''
    
    logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
    
    def start(host):
        id_ip = randint(1,65535)#ip_id
        id_ping = randint(1,65535)#ping_id
        seq_ping = randint(1,65535)#ping序列号
        #构造ping数据包
        packet = IP(dst=host,ttl=1,id=id_ip,)/ICMP(id=id_ping,seq=seq_ping)/b'hello man'
        #获取响应信息,超时2秒,开启详细信息。
        ping = sr1(packet,timeout=2,verbose=True)
        #sr1:发送三层数据包,只等待接受一个数据包响应
        if ping:
            ping.show()
            os._exit(3)
    
    
    if __name__ == '__main__':
        start(sys.argv[1])
    ping——demo
    import ipaddress
    import time
    from multiprocessing import Process,Queue
    import sys
    from Scapy_demo.ping_demo import start
    
    def more_start(network):
        net = ipaddress.ip_network(network)
        ip_process = {}
        for ip in net:
            ip_addr = str(ip)
            ping_one = Process(target=start,args=(ip_addr,))
            # ping_one.join()
            ping_one.start()
            ip_process[ip_addr] = ping_one
        ip_list = []
        for ip,process in ip_process.items():
            if process.exitcode == 3 :
                ip_list.append(ip)
            else:
                process.terminate()
        return sorted(ip_list)
    
    if __name__ == '__main__':
        begin = time.time()
        active_ip = more_start(sys.argv[1])
        print("*****ACTIVE IP*****")
        for ip in active_ip:
            print(ip)
        end = time.time()
        print(end-begin)

    更多内容需要对照官方文档自学

     
  • 相关阅读:
    如何将自己的镜像上传到私库
    基于spring-cloud的微服务(1) 服务注册中心eureka
    关于对象池技术的一些记录
    为Docker容器中运行的gitlab添加ssh的一些问题记录
    使用java实现的socket代理(支持socket4和socket5)
    ConfluenceRemoteUserAuth
    JiraRemoteUserAuth
    Apache 的mod_auth_cas模块的介绍和使用
    基于乌班图的标准镜像添加中文支持
    apache反向代解决绝对路径可能出现的问题
  • 原文地址:https://www.cnblogs.com/cou1d/p/14315648.html
Copyright © 2011-2022 走看看