如何在AODV(NS-2)中实现混杂模式并且实现邻居监测功能[转载]
来源:互联网 发布:js字符串转数字相加 编辑:程序博客网 时间:2024/04/24 14:21
原文地址:http://blog.csdn.net/qinleopard/article/details/6426277
-------------------------------------
首先,我们知道在NS2 AODV协议中,希望某个节点侦听到其邻居节点间通信信息时。不能直接在AODV协议中获取邻居节点之间的数据。所以要设置成混在模式下的监听过程。下面具体介绍如何添加该过程:
1.修改aodv/aodv.h
Make AODV agent a child class of Tap (you should have a member function tap), and define the Mac variable
- #include <mac.h>
- class AODV: public Tap, public Agent {
- public:
- void tap(const Packet *p);
- ......
- protected:
- Mac *mac_;
- ......
- }
2.修改aodv/aodv.cc
首先定义一个TCL command “install-tap” 并实现AODV::tap()函数
- int
- AODV::command(int argc, const char*const* argv) {
- ......
- else if(argc == 3) {
- ......
- else if (strcmp(argv[1], "install-tap") == 0) {
- mac_ = (Mac*)TclObject::lookup(argv[2]);
- if (mac_ == 0) return TCL_ERROR;
- mac_->installTap(this);
- return TCL_OK;
- }
- }
- return Agent::command(argc, argv);
- }
- void
- AODV::tap(const Packet *p) {
- // put your code here
- }
3.Modify tcl/lib/ns-mobilenode.tcl
- Node/MobileNode instproc add-target { agent port } {
- $self instvar dmux_ imep_ toraDebug_ mac_
- ......
- # Special processing for AODV
- set aodvonly [string first "AODV" [$agent info class]]
- if {$aodvonly != -1 } {
- $agent if-queue [$self set ifq_(0)] ; # ifq between LL and MAC
- $agent install-tap $mac_(0)
- ......
- }
具体参见:
4.在tcl脚本中调用Install-tap
在你定义的节点后面添加这样两行代码:
set tapagent [$node_($i) agent 255]$tapagent install-tap [$node_($i) set mac_(0)]
这样节点node_($i)就可以监听到其邻居节点之间的通信数据报。
下面简要介绍在Ad hoc 中添加一些IDS的过程:
根据上面提供的步骤,我们已经可以建立OADV的混杂模式(Promiscumus Mode)
首先我们得先建立一种攻击模式(如blackhole attack, greyhole attack, wormhole attack等),下一篇介绍如何添加
一个blackhole attack。
接下来我们就是要添加几个IDS监测节点。具体步骤如下(过程和上面所描述的基本一样):
1.修改aodv/aodv.h(同上)
2.修改aodv/aodv.cc
在command()函数中添加这一项:
- else if (strcmp(argv[1], "install-tap") == 0) {
- printf("执行install-tap /n");
- mac_ = (Mac*)TclObject::lookup(argv[2]);
- if (mac_ == 0) return TCL_ERROR;
- mac_->installTap(this);
- return TCL_OK;
- }
实现AODV::tap()函数
- void
- AODV::tap(const Packet *p) {
- struct hdr_cmn *ch = HDR_CMN(p);
- struct hdr_ip *ih = HDR_IP(p);
- //sendToWatchdog(p);
- if(ch->ptype() == PT_AODV) //为AODV Packet
- {
- struct hdr_aodv *ah = HDR_AODV(p);
- switch(ah->ah_type)
- {
- case AODVTYPE_RREQ:
- Sniffer_readRREQ(p);
- break;
- case AODVTYPE_RREP:
- Sniffer_readRREP(p);
- break;
- default:
- break;
- }
- }
- }
这里面的我只监测邻居节点的件的RREQ和RREP数据包,并且对监测到的RREQ和RREP数据包之后作相应的处理
如函数Sniffer_readRREQ(p)和Sniffer_readRREP(p).这个两个函数可以根据你自己的需求来实现。这里不给出这两个函数的实现了。
这里我们也可以侦听数据报文,而不仅仅是控制报文。也就是说根据你自己的具体需求来定制。
接下来就是按照上面说的那样,定义你的IDS节点,并在你需要设置成为IDS节点的tcl脚本后面添加上
set tapagent [$node_($i) agent 255]$tapagent install-tap [$node_($i) set mac_(0)]
$i就是你要定义的IDS节点ID。
- 如何在AODV(NS-2)中实现混杂模式并且实现邻居监测功能[转载]
- 如何在AODV(NS-2)中实现混杂模式并且实现邻居监测功能
- 如何在AODV(NS-2)中实现混杂模式并且实现邻居监测功能
- 如何在NS-2 AODV协议中添加一种新的数据包类型[转载]
- 如何在NS-2中添加协议[转载]
- 如何在NS-2 AODV协议中添加一种新的数据包类型
- NS2中AODV协议混杂模式配置
- 在YC++中如何实现Ajax功能
- 在YC++中如何实现Ajax功能
- 在YC++中如何实现Ajax功能
- 在YC++中如何实现Ajax功能
- 在YC++中如何实现Ajax功能
- 如何在应用程序中实现关机功能
- 如何在游戏中实现穿墙功能
- 实现在eclipse中编译ns-3的详细步骤
- 设置网卡混杂模式实现方法
- 在Wince5.0中实现关机功能 ——转载
- (转载)在OpenGL场景中实现小地图功能
- OSGi:模块层
- Asp.net的第一个一般处理程序
- cppsqlite error
- java 序列化 反序列化(Serializable)详解
- js 驗證url
- 如何在AODV(NS-2)中实现混杂模式并且实现邻居监测功能[转载]
- 自动化用例设计
- This application is currently offline 解决方法
- python dict 字典 以及 赋值 引用的一些小实验
- ocm考试相关
- 对抗out of memory之路
- 正则表达式30分钟入门教程
- eoe社区 Android 客户端项目简析
- 一个很好的图标的网站