前言
本教程以Macos环境为例,其他操作系统请自行参考.以下内容写的比较顺我的心.言外之意:我随便写的,为的是方便我自己
另外如果你是Mac用户,你需要有相应的系统环境,如果你环境从来没有安装过或者没有,需要进行以下操作:
安装 macports (macports官网)
更新 macports ,
sudo port -d selfupdate安装 arspoof ,
curl -LJO https://github.com/YeautyYE/arpspoof/releases/download/2.4b1%2Bdebian-29/arpspoof && chmod a+x arpspoof && mv arpspoof /usr/local/bin/ && sudo arpspoof项目链接 # 后面内容可以不用看.如果可以 也安装 dsniff(包含 arp 攻击的工具)sudo port install dsniff`就安装吧,kail下有dsniff工具,但这个工具太远古了,本人MBP装不上垃圾东西,我尝试过修复,但修不好..所以这里选择#前的替代方案.安装 ettercap ,
brew install ettercap && brew install adwaita-icon-theme # 可选:adwaita-icon-theme# 如果你觉得按钮有问题无所谓的话,也可以选择不安装 adwaita-icon-theme.安装 nmap ,
brew install nmap
上面👆的内容看不懂?对不起,这个不是纯小白能看的内容,如果你连homebrew都没装,ARP协议及欺骗原理,网关等等都不知道的话,建议你还是马上关闭这个网页吧.会浪费你的时间.
开启网卡(一般不需要)
1 | sudo chmod 777 /dev/bpf* |
查看目标主机的ARP缓存记录的网关IP以及mac地址(顺便看一下en*端口):如果出现批量重复mac地址,很有可能你在运行或运行过arpspoof命令,出现这种情况时mac地址不采用(因为不可信,nmap查出来的较为可信)
1 | arp -a |
查询本机各个网卡名的mac地址,本机IP等信息
1 | ifconfig |
以网关192.168.1.1为例,使用 ping 方式扫描(不准确,但快),192.168.1.1/24”表示扫描”192.168.1.1-192.168.1.254”这个网段的所有机器。
1 | nmap -sP 192.168.31.1/24 |
注:nmap功能非常强大,这里不详细说.
Mac下查询本机地址及网关地址(顺带看一下子网掩码):
Linux呢?我不知道🤷♂️诶才怪,Linux的是 route -n
1 | netstat -nr |
Routing table flags
The following table describes the Flags column in the netstat -rn output:
| Flag | Description |
|---|---|
| U | Up—Route is valid |
| G | Gateway—Route is to a gateway router rather than to a directly connected network or host |
| H | Host name—Route is to a host rather than to a network, where the destination address is a complete address |
| R | Reject—Set by ARP when an entry expires (for example, the IP address could not be resolved into a MAC address) |
| D | Dynamic—Route added by a route redirect or RIP (if routed is enabled) |
| M | Modified—Route modified by a route redirect |
| C | Cloning—A new route is cloned from this entry when it is used |
| L | Link—Link-level information, such as the Ethernet MAC address, is present |
| S | Static—Route added with the route command |
翻译如下:
路由表旗
下表描述了netstat -rn输出中的Flags列:
| 国旗 | 描述 |
|---|---|
| U | Up—路线有效 |
| G | 网关—路由是通往网关路由器,而不是直接连接的网络或主机 |
| H | 主机名—路由是主机而不是网络,其中目标地址是一个完整的地址 |
| R | 拒绝—当条目过期时由ARP设置(例如,IP地址无法解析为MAC地址) |
| D | 动态—通过路由重定向或RIP添加的路由(如果启用路由) |
| M | 修改—路由重定向修改的路线 |
| C | 克隆—使用时从此条目克隆新路由 |
| L | 链接—存在链接级信息,例如以太网MAC地址 |
| S | 静态—路线与路由命令一起添加 |
Flag UCS 为网关或本机IP或子网掩码 Flag UHLWIir 为网关这个我也不太清楚.建议参考上面资料并自行判断
表达式link#x,其中x是某个数字,用于指示相应的地址是链路级地址,即仅在主机物理连接的网络上运行的地址。
换句话说,这些是直接连接的网络,不需要额外的路由。
至于链接编号(为什么它们是#4和#5,而不是您可能期望的#1和#2),检查ifconfig -a的输出,您会看到链接#1通常是环回接口(lo0)。链路2和3通常是IPv6接口(gif0和stf0),为典型的en0(以太网)和en1(机场)留下链接4和5
在进行arp欺骗之前,为了让对方没有察觉.我们可以当个中间人(算是中间人(MITM)攻击了),这个就需要我们开启IP转发,使得本机具有路由功能,否则当欺骗成功之后,目标机会断网.
开启端口转发
Mac下(修改 mac 的packet filter包过滤器):
在 /etc/pf.anchors 目录下新建文件 http,内容如下
rdr pass on en0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
8080是程序监听的端口号,是否为en0,请以实际为准,否则无效果.修改 /etc/pf.conf 文件,在适当的位置加入
rdr-anchor "http-forwarding"和load anchor "http-forwarding" from "/etc/pf.anchors/http"两行命令.必须按照顺序插入,否则会无效。 /etc/pf.conf 修改后是这样:
1
2
3
4
5
6
7
8
9
10
11
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "http-forwarding"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "http-forwarding" from "/etc/pf.anchors/http"重启 packet filter,依次输入命令
sudo pfctl -ef /etc/pf.conf和sudo pfctl -E
开启IP转发:
Mac下:
1 | sudo sysctl -w net.inet.ip.forwarding=1 |
Linux下:
1 | echo 1 >/proc/sys/net/ipv4/ip_forward && cat /proc/sys/net/ipv4/ip_forward |
查看本机IP转发情况:
1 | sudo sysctl -a | grep forward |
ARP欺骗
假设被攻击的 IP 是 192.168.1.66,局域网的网关是 192.168.1.1,攻击电脑使用的网卡接口是 en0,则欺骗命令如下:
1 |
|
arpspoof - 拦截交换局域网上的数据包
arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host
参数:
-i:指定要使用的接口(即指定一块网卡),像eth0等。
-c:指定在恢复ARP配置时使用的硬件地址;当在清理(cleaning up)时,数据包的源地址可以用自己的也可以用主机(host)的硬件地址.使用伪造的硬件地址可能导致某些配置下的交换网络、AP网络或桥接网络通信中断,然而它比起默认值————使用自己的硬件地址要工作地更为可靠。
-t:目标地址,如果没指定则会指定LAN上的所有主机。重复可以指定多个主机。
-r:捕获两个方向(目标和主机(host))上的流量,这样就不需要arpspoof发出两个命令了。(仅仅在和-t参数一起使用时有效)
host:你想要截获数据包的主机 (通常是网关)。
想了解更多建议Google或者链接🔗
ettercap截获流量
在前面步骤完成后,可以开始使用ettercap捕获流量了,用命令行开启ettercap的图形窗口:
1 | sudo ettercap -G |
选择网卡端口en0(请根据实际情况).然后点✔︎即可.

开始扫描.

接下来查看扫描出来的主机信息.

在Host List中添加目标主机IP到 Target 1,添加网关IP到 Target 2.
再开启ARP,选择”sniff remote connections”,然后点击”OK”。这样就配置完成,ettercap会自动开始arp欺骗。.然后再查看数据(选择View下的”Connections”可以监听流量).



| 命令 | 说明 |
|---|---|
| ARP poisoning | ARP投毒 |
| DNP poisoning | DNP投毒 |
| ICMP redirect | icmp重定向 |
| Port stealing | 端口欺骗 |
| DHCP spoofing | DHCP欺骗 |
| stop MITM | 停止攻击 |
| SSL intercept | ssl嗅探 |
| Hosts | 显示主机列表 |
| Filters | 载入二进制脚本 |
| Plugins | 插件 |
hosts选项:
| 命令 | 说明 |
|---|---|
| Hosts list | 扫描到的主机列表 |
| Enable ipv6 scan | 扫描ipv6地址 |
| Scan for hosts | 扫描主机列表 |
| load hosts form file | 从外部文件载入主机列表 |
| Save hosts to file | 保存主机列表到文件 |
修改 /etc/ettercap/etter.dns 并激活dns_spoof插件即可实现DNS劫持.例如 ettercap -i eth0 -Tp -M arp:remote -P dns_spoof /192.168.127.211// /192.168.127.2//
也有ddos插件,可实现ddos攻击,在同一网关下,以我电脑性能实测完全碾压.不同网关的话,另论
怎样防范ARP欺骗?
很简单.
1.在主机绑定网关MAC与IP地址为静态(默认为动态),命令:arp -s 网关IP 网关MAC
2.在网关绑定主机MAC与IP地址,有条件可以使用ARP防火墙.














