• scapy发送伪装包(1) 获取本机信息


    目标:获取本机信息

    广告时间:  scapy功能很强大啊。但是基本信息还用不到,使用python简单的获取即可。

    发送伪造包,就要从ether层进行发送,不然发送例程调用arp来获取目标mac地址的时候,会把本机真实的mac也放在首部。

    简单的看下首部:

    >>> ls(Ether)
    dst        : DestMACField         = (None)
    src        : SourceMACField       = (None)
    type       : XShortEnumField      = (0)
    dst为目标的首部

    src为源mac

    type为请求类型

    校验码是由驱动来完成。所以此次只需要填充这三个就好了。

    1. 第一个要解决的问题就是目标mac了,我使用了一个比较简单的方法,就是直接从route表里面查找默认网关,请求网关的地址------

                            传入参数为本机ip、本机mac地址和是否使用默认写入的网关地址flag。flag为false的话,直接返回一个事先查找好的mac地址。

    def GetGateWay(ip,t_hw,flag):
    """
    get local gateway
    """
    if flag == True:
    afile
    = os.popen("route")
    data
    = afile.read()
    afile.close()
    #the ip of the gateway
    p = re.compile(r'default +(([0-9]+\.?){4})')
    gateway
    = p.findall(data)[0][0]
    #send a arp to get the hwaddress
    arp = ARP(hwtype = 0x0001,ptype = 0x0800,op = 0x0001,hwsrc = t_hw,psrc = ip,pdst = gateway)
    recv
    = sr1(ARP(str(arp)))
    return recv[0].hwsrc
    else:
    return 'XX:XX:XX:XX:XX:XX'

       这个方法的缺点就是如果当时的arp请求很少,那么通过arp包就可以反向查找到真实发送端的ip。可以考虑使用sniff等待一个arp查询。

    2. 第一个问题解决后,mac首部就剩下本机mac和类型了

          类型直接填入0x0800就好了,

        mac获取可以用流传很广的方法:

    #=====================================
    #
    return a string like xx:xx:xx:xx:xx:xx
    #
    =====================================
    def GetMac():
    """
    get the local mathine`s mac address
    """
    hwaddress
    = uuid.uuid1().hex[-12:]
    p
    = re.compile(r'([0-9a-fA-F]{2})')
    return p.subn(r'\1:',hwaddress)[0][:-1]

    这个方法来查本机的真实ip也很容易找到:

        
    #=====================================
    #
    return a string like 192.168.2.1
    #
    =====================================
    def GetIp():
    """
    get local ip
    """
    return socket.getaddrinfo(socket.gethostname(),None)[-1][4][0]


    需求的辅助函数已经完成了,下次就可以开始进行构造了。

  • 相关阅读:
    JAVA地址通过百度地图API转化为经纬度
    JS验证手机号
    JAVA获取六位随机数
    JS判断是否为“YYYYMMDD”式的日期
    JAVA 通过url下载图片保存到本地
    JAVA汉字转拼音
    JS判断是否是苹果系统(ios)和安卓系统(Android)客户端
    JAVA获取请求链接中所有参数(GET请求)
    如何高效学习 Kubernetes 知识图谱?
    当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
  • 原文地址:https://www.cnblogs.com/amaoxiaozhu/p/2130586.html
Copyright © 2020-2023  润新知