zoukankan      html  css  js  c++  java
  • python中的scapy模块

    scapy模块是干嘛用的?

    答:Scapy的是一个强大的交互式数据包处理程序(使用python编写)。它能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等等。它可以很容易地处理一些典型操作,比如端口扫描,tracerouting,探测,单元测试,攻击或网络发现(可替代hping,NMAP,arpspoof,ARP-SK,arping,tcpdump,tethereal,P0F等)。最重要的他还有很多更优秀的特性——发送无效数据帧、注入修改的802.11数据帧、在WEP上解码加密通道(VOIP)、ARP缓存攻击(VLAN)等,这也是其他工具无法处理完成的。

    src:源IP

    dst:目的IP

    1.Sniff方法

    Sniff拿来干嘛的?答:用来嗅探数据

    案例一:b = sniff(filter="icmp and host 127.0.0.1", count=2)

    filter:过滤器
    count:指定你需要嗅探的数据包的个数,留空则默认为嗅探无限个
    prn:表示每个数据包处理的函数,可以是lambda.如:prn=lambda x:x.summary() #summary是总结的意思。
    iface:用来指定要在哪个网络接口上进行抓包(通常不指定即所有网络接口)

    发送ICMP数据包:

    ARP:

      首先需要了解ARP的具体原理:

    由于局域网的网络流通不是根据IP地址进行,而是根据MAC地址进行传输,这样的一个网络协议,称之为arp协议

    首先网络一经启用,客户端就会每隔一定时间发送ARP数据包给网关,网关是通过MAC来识别这个客户端的,客户端是通过IP去识别网关的(一般网关都是1)

    这里涉及到“找”的关系,那么网关如何找到客户端呢?

    网关会对整个网络进行广播找客户端的MAC(可以理解为一个操场上放广播喊某个学生的名字,而这个名字就是MAC)如果MAC这个对应的人听到了就会去给网关发送一个ARP数据包,并且告诉网关自己的IP以及MAC。那么这里就会导致一个欺骗,也就是说本来网关找的是客户端A,但是客户端B却骗网关说我就是你要找的那个MAC,然后伪造A的MAC并且将自己的IP以及伪造的MAC告诉网关。(因为客户端B比客户端A还要快速到达网关所以网关就认为客户端B是正确的)[更加形象化的来说就是校运会颁发奖状,学校通过广播的形式找得奖的A,但是B却以A的名字去把奖状领了。此时这个人的名字是MAC,这个人就是IP,学校颁发奖状的人只认识这个名字,并不认识这个人]

    同理上面是欺骗网关,也可以欺骗客户端。

    假设现在客户端A要发送ARP数据给网关,那么客户端B就篇客户端说我是网关,因为客户端是通过IP去识别网关的。客户端B将自己的IP改为1客户端A就会以为是客户端B是网关,就会将数据包传输给B。

    拓展:ARP缓存表

    https://zhidao.baidu.com/question/111688702.html

    所以总结上面的来说。ARP的欺骗有三种欺骗,欺骗网关,欺骗客户端 ,欺骗所有客户端。=>ARP协议本身就是有漏洞的<=

    #pkt = srploop(Ether(dst=d_mac)/ARP(psrc=route_ip,hwsrc=lcoal_mac,pdst=d_ip,hwdst=d_mac,op=2)) #欺骗目标计算机 告诉目标机器我是网关
    #pkt = srploop(Ether(dst=route_mac)/ARP(psrc=d_ip,hwsrc=lcoal_mac,pdst=route_ip,hwdst=route_mac,op=2)) #欺骗网关 告诉网关我是目标机器
    #pkt = srploop(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(hwsrc=lcoal_mac,psrc=lcoal_ip,op=2)) #广播APR欺骗 告诉我各位我是网关

     

      arp = ARP(hwsrc=src_mac, psrc=gateway_ip, hwdst=tgt_mac, pdst=tgt_ip, op="is-at") 

    scapy模块学习参考:

  • 相关阅读:
    DispatcherServlet?
    解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法?
    面向对象的特征有哪些方面?
    服务调用是阻塞的吗?
    构造器Constructor是否可被override?
    迭代器和枚举之间的区别?
    Kafka 判断一个节点是否还活着有那两个条件?
    数据传输的事务定义有哪三种?
    mq 的缺点 ?
    如何获取 topic 主题的列表?
  • 原文地址:https://www.cnblogs.com/nul1/p/9017747.html
Copyright © 2011-2022 走看看