如何用Python编写代码实现ARP请求发送、网络扫描及欺骗功能?

2026-06-11 06:021阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1355个文字,预计阅读时间需要6分钟。

如何用Python编写代码实现ARP请求发送、网络扫描及欺骗功能?

目录 + 0. ARP介绍

1.Scapy概述

2.Scapy简单演示

2.1 安装 2.2 构造包演示 2.2.1 进入kamene交互界面 2.2.2 查看以太网头部 2.2.3 查看ICMP头部 2.2.4 查看IP头部 2.2.5 查看TCP/UDP头部 2.2.6 简单构造

目录

  • 0. ARP介绍
  • 1. Scapy简述
  • 2. Scapy简单演示
    • 2.1 安装
    • 2.2 构造包演示
      • 2.2.1 进入kamene交互界面
      • 2.2.2 查看以太网头部
      • 2.2.3 查看 ICMP 头部
      • 2.2.4 查看 IP 头部
      • 2.2.5 查看 TCP/UDP 头部
      • 2.2.6 简单构造 ICMP 包
      • 2.2.7 简单 构造 ARP 包
  • 3. 构造 ARP 请求
  • 4. 构造 ARP 扫描
  • 5. 构造 ARP 欺骗


0. ARP介绍

首先,先回忆下TCP/IP模型,从下到上分为:数据链路层、网络层、传输层、应用层,那么ARP到底属于哪一层?有人会说是网络层,但实际是属于数据链路层,只不过还要为网络层提供服务。

ARP的主要用途是IP(32bit)地址到物理MAC(48bit)地址的映射关系。别看表面主机知道了远端IP地址就可以通信,实则先要知道远端的MAC地址(借助ARP),通过网卡到交换机构建数据链路层通信,再通过上层进行数据交互。

另外,你可能会了解到代理ARP、免费ARP、RARP这些,其中你都能搞明白他们工作原理是怎么样的嘛?
这里咱们简单回顾一下:

  • 代理ARP:一般路由器通常充当代理角色,代替远端主机响应本地的ARP请求;
  • 免费ARP:一种特殊ARP请求报文,用于检测IP冲突、硬件地址变更触发免费ARP;
  • RARP:与ARP相反,主要用于无盘工作站,请求物理MAC(48bit)地址到IP(32bit)地址的映射;

1. Scapy简述

Scapy是一个Python语言编写的工具,也是一个强大的交付式数据包处理程序,能够伪造或者解码大量的网络协议数据包,能够发送、嗅探、剖析和伪造网络数据包,如端口扫描、路由跟踪、探测、攻击或网络发现等。使用Scapy可以替代hping、arpspoof、arp-sk、arping、p0f等功能,甚至可以代替nmap、tcpdump和tshark的部分功能。此外,Scapy还有很多其他工具没有的特性,如发送无效数据帧、注入修改的802.11数据帧、在WEB上解码加密通道(VOIP)、ARP缓存攻击(VLAN)等。

Scapy的主要功能如下:

  • Scanning(扫描)
  • Fingerprinting(识别)
  • Testing(测试)
  • Packet forging(包铸造)
  • Attacking(攻击)
  • Sniffing(抓包分析)

收发数据包介绍:

  • sr():发送三层数据包,等待接受一个或者多个数据包的响应。
  • sr1( ):发送三层数据包,并仅仅只等待接受一个数据包的响应。
  • srp():发送二层数据包,并且等待响应。
  • send():仅仅发送三层数据包,系统会自动处理路由和二层信息。
  • sendp():发送二层数据包。

作为网工,你是不是经常抓包来分析某协议头部结构,现在就可以用Scapy来构造发送数据包啦。

如何用Python编写代码实现ARP请求发送、网络扫描及欺骗功能?

在python3的环境下,现在叫法是 Kamene,之前叫做Scapy。

2. Scapy简单演示

2.1 安装

pip3 install -i pypi.douban.com/simple/ kamene #使用豆瓣源进行安装kamene

说明:强烈建议在linux环境下安装及测试(我用的是ubuntu 16)。

2.2 构造包演示

2.2.1 进入kamene交互界面

#安装好后,直接通过kamene进入,类似python交互式界面 [emailprotected]:~# kamene WARNING: No route found for IPv6 destination :: (no default route?). This affects only IPv6 INFO: Please, report issues to github.com/phaethon/kamene WARNING: IPython not available. Using standard Python shell instead. Welcome to kamene (3.0.0) >>>

2.2.2 查看以太网头部

>>> Ether() <Ether |> >>> _.show() #'_' 下划线表示上一条命令执行的结果,通过show()展示结果 ###[ Ethernet ]### WARNING: Mac address to reach destination not found. Using broadcast. dst= ff:ff:ff:ff:ff:ff src= 00:00:00:00:00:00 type= 0x9000

2.2.3 查看 ICMP 头部

>>> ICMP() <ICMP |> >>> _.show() ###[ ICMP ]### type= echo-request code= 0 chksum= None id= 0x0 seq= 0x0

2.2.4 查看 IP 头部

>>> IP() <IP |> >>> _.show() ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= 64 proto= ip chksum= None src= 127.0.0.1 dst= 127.0.0.1 \options\

2.2.5 查看 TCP/UDP 头部

>>> TCP() <TCP |> >>> _.show() ###[ TCP ]### sport= ftp_data dport= scapy.net/ github.com/phaethon/kamene


如果喜欢的我的文章,欢迎关注我的公众号:点滴技术,扫码关注,不定期分享

本文共计1355个文字,预计阅读时间需要6分钟。

如何用Python编写代码实现ARP请求发送、网络扫描及欺骗功能?

目录 + 0. ARP介绍

1.Scapy概述

2.Scapy简单演示

2.1 安装 2.2 构造包演示 2.2.1 进入kamene交互界面 2.2.2 查看以太网头部 2.2.3 查看ICMP头部 2.2.4 查看IP头部 2.2.5 查看TCP/UDP头部 2.2.6 简单构造

目录

  • 0. ARP介绍
  • 1. Scapy简述
  • 2. Scapy简单演示
    • 2.1 安装
    • 2.2 构造包演示
      • 2.2.1 进入kamene交互界面
      • 2.2.2 查看以太网头部
      • 2.2.3 查看 ICMP 头部
      • 2.2.4 查看 IP 头部
      • 2.2.5 查看 TCP/UDP 头部
      • 2.2.6 简单构造 ICMP 包
      • 2.2.7 简单 构造 ARP 包
  • 3. 构造 ARP 请求
  • 4. 构造 ARP 扫描
  • 5. 构造 ARP 欺骗


0. ARP介绍

首先,先回忆下TCP/IP模型,从下到上分为:数据链路层、网络层、传输层、应用层,那么ARP到底属于哪一层?有人会说是网络层,但实际是属于数据链路层,只不过还要为网络层提供服务。

ARP的主要用途是IP(32bit)地址到物理MAC(48bit)地址的映射关系。别看表面主机知道了远端IP地址就可以通信,实则先要知道远端的MAC地址(借助ARP),通过网卡到交换机构建数据链路层通信,再通过上层进行数据交互。

另外,你可能会了解到代理ARP、免费ARP、RARP这些,其中你都能搞明白他们工作原理是怎么样的嘛?
这里咱们简单回顾一下:

  • 代理ARP:一般路由器通常充当代理角色,代替远端主机响应本地的ARP请求;
  • 免费ARP:一种特殊ARP请求报文,用于检测IP冲突、硬件地址变更触发免费ARP;
  • RARP:与ARP相反,主要用于无盘工作站,请求物理MAC(48bit)地址到IP(32bit)地址的映射;

1. Scapy简述

Scapy是一个Python语言编写的工具,也是一个强大的交付式数据包处理程序,能够伪造或者解码大量的网络协议数据包,能够发送、嗅探、剖析和伪造网络数据包,如端口扫描、路由跟踪、探测、攻击或网络发现等。使用Scapy可以替代hping、arpspoof、arp-sk、arping、p0f等功能,甚至可以代替nmap、tcpdump和tshark的部分功能。此外,Scapy还有很多其他工具没有的特性,如发送无效数据帧、注入修改的802.11数据帧、在WEB上解码加密通道(VOIP)、ARP缓存攻击(VLAN)等。

Scapy的主要功能如下:

  • Scanning(扫描)
  • Fingerprinting(识别)
  • Testing(测试)
  • Packet forging(包铸造)
  • Attacking(攻击)
  • Sniffing(抓包分析)

收发数据包介绍:

  • sr():发送三层数据包,等待接受一个或者多个数据包的响应。
  • sr1( ):发送三层数据包,并仅仅只等待接受一个数据包的响应。
  • srp():发送二层数据包,并且等待响应。
  • send():仅仅发送三层数据包,系统会自动处理路由和二层信息。
  • sendp():发送二层数据包。

作为网工,你是不是经常抓包来分析某协议头部结构,现在就可以用Scapy来构造发送数据包啦。

如何用Python编写代码实现ARP请求发送、网络扫描及欺骗功能?

在python3的环境下,现在叫法是 Kamene,之前叫做Scapy。

2. Scapy简单演示

2.1 安装

pip3 install -i pypi.douban.com/simple/ kamene #使用豆瓣源进行安装kamene

说明:强烈建议在linux环境下安装及测试(我用的是ubuntu 16)。

2.2 构造包演示

2.2.1 进入kamene交互界面

#安装好后,直接通过kamene进入,类似python交互式界面 [emailprotected]:~# kamene WARNING: No route found for IPv6 destination :: (no default route?). This affects only IPv6 INFO: Please, report issues to github.com/phaethon/kamene WARNING: IPython not available. Using standard Python shell instead. Welcome to kamene (3.0.0) >>>

2.2.2 查看以太网头部

>>> Ether() <Ether |> >>> _.show() #'_' 下划线表示上一条命令执行的结果,通过show()展示结果 ###[ Ethernet ]### WARNING: Mac address to reach destination not found. Using broadcast. dst= ff:ff:ff:ff:ff:ff src= 00:00:00:00:00:00 type= 0x9000

2.2.3 查看 ICMP 头部

>>> ICMP() <ICMP |> >>> _.show() ###[ ICMP ]### type= echo-request code= 0 chksum= None id= 0x0 seq= 0x0

2.2.4 查看 IP 头部

>>> IP() <IP |> >>> _.show() ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= 64 proto= ip chksum= None src= 127.0.0.1 dst= 127.0.0.1 \options\

2.2.5 查看 TCP/UDP 头部

>>> TCP() <TCP |> >>> _.show() ###[ TCP ]### sport= ftp_data dport= scapy.net/ github.com/phaethon/kamene


如果喜欢的我的文章,欢迎关注我的公众号:点滴技术,扫码关注,不定期分享