• 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]


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

  • 相关阅读:
    网络基础知识-TCP/IP协议各层详解
    MySQL及其图形界面navicat的安装
    Python 浅谈编程规范和软件开发目录规范的重要性
    python 浅析模块,包及其相关用法
    spring batch中MyBatisPagingItemReader分页使用介绍
    eclipse中git插件使用
    oracle中查找某用户执行某张表的操作操作记录
    redis集群主流架构方案分析
    消息队列常见的 5 个应用场景
    Kafka vs RocketMQ——单机系统可靠性
  • 原文地址:https://www.cnblogs.com/amaoxiaozhu/p/2130586.html
Copyright © 2020-2023  润新知