当前位置:网站首页>在mininet中测试arp欺骗
在mininet中测试arp欺骗
2022-08-02 14:12:00 【Soonyang Zhang】
我本来只用给出测试的拓补,以及仿真中使用的命令,本篇博客就算完事。最近csdn的博客系统,好像不允许发布全是英文内容的博客。所以,我要写点废话,便于在此记录我的所学。
测试使用的拓补,2h1s.py
#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.cli import CLI
from mininet.link import TCLink
import time
import datetime
import subprocess
import os,signal
import sys
# https://segmentfault.com/a/1190000009562333
# arpspoof -i h2-eth0 -t 10.0.1.1 10.0.1.3
#
# h1----s1----h2------h3
#
bottleneckbw=6
nonbottlebw=500;
buffer_size =bottleneckbw*1000*30/(1500*8)
net = Mininet( cleanup=True )
h1 = net.addHost('h1',ip='10.0.1.1')
h2 = net.addHost('h2',ip='10.0.1.2')
h3 = net.addHost('h3',ip='10.0.2.2')
s1 = net.addSwitch( 's1' )
c0 = net.addController('c0')
net.addLink(h1,s1,intfName1='h1-eth0',intfName2='s1-eth0',cls=TCLink , bw=nonbottlebw, delay='10ms', max_queue_size=10*buffer_size)
net.addLink(s1,h2,intfName1='s1-eth1',intfName2='h2-eth0',cls=TCLink , bw=bottleneckbw, delay='10ms', max_queue_size=buffer_size)
net.addLink(h2,h3,intfName1='h2-eth1',intfName2='h3-eth0',cls=TCLink , bw=nonbottlebw, delay='50ms', max_queue_size=buffer_size)
net.build()
h1.cmd("ifconfig h1-eth0 10.0.1.1/24")
h1.cmd("route add default gw 10.0.1.3 dev h1-eth0")
h1.cmd('sysctl net.ipv4.ip_forward=1')
h2.cmd("ifconfig h2-eth0 10.0.1.2/24")
h2.cmd("ifconfig h2-eth1 10.0.2.1/24")
h2.cmd("ip route add to 10.0.2.0/24 via 10.0.2.2")
h2.cmd("ip route add to 10.0.1.0/24 via 10.0.1.1")
h2.cmd('sysctl net.ipv4.ip_forward=1')
h3.cmd("ifconfig h3-eth0 10.0.2.2/24")
h3.cmd("route add default gw 10.0.2.1 dev h3-eth0")
h3.cmd('sysctl net.ipv4.ip_forward=1')
net.start()
time.sleep(1)
CLI(net)
net.stop()
参考[1]安装可以arp欺骗的软件。
sudo apt-get install dsniff
启动mininet。
sudo su
xxxxx
python 2h1s.py
测试h1 ping h3。
xterm h1
ping 10.0.2.2
h1需要获取gateway的mac地址。h1的gateway为10.0.1.3。这个地址在这个微型网络中不存在。h1发送的arp包能够被h2截获,从而进行arp欺骗。h2可以向h1返回h2-eth0的mac地址。
xterm h2
arpspoof -i h2-eth0 -t 10.0.1.1 10.0.1.3
测试h1 ping h3。 成功。
如果你想实现一个arp欺骗的工具,在daemon模下,就必须开启网卡的混杂模式[2]。否则,主机网卡是不能向应用提交非本机IP的数据包的。可以参考[3]的实现。
ifr.ifr_flags = ifr.ifr_flags | IFF_PROMISC;
if (ioctl (sock, SIOCGIFFLAGS, &ifr) < 0) {
perror("ioctl");
exit(1);
}
参考:
[1] 局域网ARP欺骗原理详解
[2] 混杂模式介绍
[3] arproxy
边栏推荐
猜你喜欢
随机推荐
TypeScript
LeetCode 2344. 使数组可以被整除的最少删除次数 最大公约数
Qt | 实现一个简单的可以转动的仪表盘
Exotic curiosity-a solution looking - bit operations
模板系列-二分
二叉排序树与 set、map
6. Unified logging
Unity-Post Processing
从FAST TCP到POWERTCP
冷读123
[System Design and Implementation] Flink-based distracted driving prediction and data analysis system
剑指offer:在O(1)时间删除链表结点
Codeforces Round #605 (Div. 3)
UnityAPI-Ray-Physics
MATLAB绘图函数fplot详解
剑指offer:合并两个排序的链表
Detailed introduction to drawing complex surfaces using the plot_surface command
LITESTAR 4D应用:室内植物照明模拟
泰伯效应.
许多代码……