NS3网络仿真(11): ARP
快乐虾
http://blog.csdn.net/lights_joy/
欢迎转载,但请保留作者信息
ARP(Address ResolutionProtocol,地址解析协议)协议的基本功能就是通过目标设备的IP地址。查询目标设备的MAC地址,以保证通信的进行。本节借助NS3学习一下此协议。
1.1 ARP帧的格式
一个ARP帧的格式例如以下:
从网上抓一个ARP帧看看。
这是一个从192.168.24.1发送出来的arp请求帧:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
非常easy和上面的ARP帧格式相应上,只是奇怪的是以太网目的地址并非期望的广播地址??
再看看192.168.24.129的回复:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
1.2 用NS3生成ARP请求包
接下来尝试用NS3生成ARP请求包:
- Ptr<Packet> pkt = ns3::Create<Packet>();
- // 加入ARP头
- ArpHeader ah;
- ah.SetRequest(
- ns3::Mac48Address((const char*)src_mac),
- (const char*)src_ip,
- ns3::Mac48Address((const char*)dest_mac),
- (const char*)dest_ip);
- pkt->AddHeader(ah);
- // 加入以太网头
- EthernetHeader eh;
- eh.SetDestination("ff:ff:ff:ff:ff:ff");
- eh.SetSource((const char*)sa);
- eh.SetLengthType(ns3::ArpL3Protocol::PROT_NUMBER);
- pkt->AddHeader(eh);
- int len;
- len = pkt->CopyData(buffer, 2048);
- pktheader.caplen = len;
- pktheader.len = len;
- pktheader.ts.tv_sec = (m_nInterval * i) / 1000;
- pktheader.ts.tv_usec = ((m_nInterval * i) % 1000) * 1000;
- len = pcap_sendqueue_queue(m_pSendQueue, &pktheader, buffer);
- if (len == -1)
- {
- AfxMessageBox(L"无法发送全部的数据包!");
- break;
- }
上面的代码将生成一个NS3下的Packet并将之加入到winpcap的发送队列中。在准备好批量查询的ARP包后就能够使用winpcap一次性将全部包发送出去:
len= pcap_sendqueue_transmit(m_hSendHandle,m_pSendQueue,m_nInterval);
1.3 用NS3分析ARP回包
在发送完ARP请求包后。须要处理ARP回包,我们使用winpcap直接抓取网口上的包进行分析。当winpcap收到包后将调用我们的回调函数:
- /* Callback function invoked by libpcap for every incoming packet */
- void CCommonArpSendDlg::packet_handler(void *_param, const void *_header, const void *_pkt_data)
- {
- uint8_t buffer[2048], *p;
- p = (uint8_t *)_pkt_data + 12;
- if (p[0] != 8 || p[1] != 6)
- return;
- // arp
- const struct pcap_pkthdr *header = (const struct pcap_pkthdr *)_header;
- CCommonArpSendDlg* dlg = (CCommonArpSendDlg*)_param;
- Ptr<Packet> pkt = ns3::Create<Packet>((uint8_t*)_pkt_data, header->len);
- EthernetHeader eh;
- ArpHeader ah;
- pkt->RemoveHeader(eh);
- pkt->RemoveHeader(ah);
- if (!ah.IsReply())
- return;
- uint32_t nip = ah.GetSourceIpv4Address().Get();
- CString ip;
- ip.Format(L"%d.%d.%d.%d", (nip >> 24) & 0xff, (nip >> 16) & 0xff, (nip >> 8) & 0xff, nip & 0xff);
- ah.GetSourceHardwareAddress().CopyTo(buffer);
- mac.Format(L"%02x:%02x:%02x:%02x:%02x:%02x", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5]);
- .......
- }
1.4 成果
再加上一些辅助的功能,我们非常easy得到了一个ARP的測试工具:
再能够研究一下ARP攻击的问题了。呵呵~~~
NS3网络仿真(11): ARP的更多相关文章
- NS3网络仿真(7): Wifi节点
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在上一节中.我们仿真了一个总线型网络,这一节尝试将上一节中的n0变成一个无线的AP.再连上几个节点 ...
- NS3网络仿真(2):first.py
1 安装基本模块 11 安装Python 12 安装PTVS 13 加入对python-279的支持 2 在vs2013下编译NS3 3 编译NetAnim 4 在vs2 ...
- NS3网络仿真(6): 总线型网络
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载.但请保留作者信息 在NS3提供的第一个演示样例first.py中,模拟了一个点对点的网络,接下来的一个演示样例代码模 ...
- NS3网络仿真(9): 构建以太网帧
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3使用了一个叫Packet的类来表示一个数据帧,本节尝试用它构造一个以太网帧. 以下是一个典 ...
- NS3网络仿真(12): ICMPv4协议
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 ICMP的全称是 Internet ControlMessage Protocol . 其目的就是 ...
- NS3网络仿真(3): NetAnim
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3提供的演示样例first.py中,并没有生成NetAnim所须要的xml文件,本节我们尝试 ...
- NS3网络仿真(10): 解析以太网帧
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载.但请保留作者信息 解析以太网帧的过程是构建以太网帧的逆过程,当我们接收到一个以太网帧时,仍然以上一节中的ARP帧为例 ...
- NS3网络仿真(4): DataRate属性
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在first.py中创建了一个点到点的信道,且配置了两个属性: pointToPoint = ns ...
- NS3网络仿真(5): 数据包分析
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在我们生成的xml文件里.是不包括生成的数据包的数据的,在我们的脚本中加入以下的语句: point ...
随机推荐
- 在vue项目当中使用sass
需要分别安装node-sass 和 sass-loader;可以不需要ruby; webpack当中配置 { test: /\.vue$/, loader: 'vue-loader', options ...
- bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有
题目大意 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj. 现在所有取法共n*(n-1)/2个和,要你求出X1,X2,...Xn. 输出所有满足条件 ...
- 【CF505D】Mr. Kitayuta's Technology
题目大意: 在一个有向图中,有n个顶点,给出m对数字(u,v)表示顶点u和顶点v必须直接或者间接相连,让你构造一个这样的图,输出最少需要多少条边. 挖坑待填 官方题解链接:http://codefor ...
- Java手机游戏开发简明教程 (SunJava开发者认证程序员 郎锐)
原文发布时间为:2008-07-30 -- 来源于本人的百度文章 [由搬家工具导入] Java手机游戏开发实例简明教程 (SunJava开发者认证程序员 郎锐)一、手机游戏编写基础1.手机游戏设计的基 ...
- es6总结(七)--proxy & reflect
- js-浅显基础-正则表达式集
今天进博客园,忽然发现我也是有粉丝的人啦!!!!!!!!谢谢谢谢关注(爱心爱心) 本来不想做这个笔记的,但是每次都百度我自己都烦死了,所以还是自己整理一下方便我后期使用: 独笑笑不如众笑笑,放轻松点 ...
- js -“=”“==”和“===”的区别
这个问题再面试中经常被问到,说实话我都是懵的,一个“=”和两个“==”等的区别我还是知道的,就是三个“===”我完全是不知道的,因为我基本上都没有遇到过且用到过,所以再这个问题上我是没分的,人家考官就 ...
- Java原来如此-反射机制
在Java运行时环境中,对于任意一个类,能知道这个类有哪些属性和方法.对于任意一个对象,能调用它的任意一个方法.这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射(Reflect ...
- R语言实战读书笔记(七)基本统计分析
summary() sapply(x,fun,options):对数据框或矩阵中的每一个向量进行统计 mean sd:标准差 var:方差 min: max: median: length: rang ...
- luogu P1402 酒店之王
题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...