如何在AODV(NS-2)中实现混杂模式并且实现邻居监测功能[转载]
2013-06-21 15:41
357 查看
原文地址: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
[cpp] view
plaincopy
#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()函数
[cpp] view
plaincopy
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
[b][cpp] view
plaincopy[/b]
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
在你定义的节点后面添加这样两行代码:
这样节点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()函数中添加这一项:
[b][c-sharp] view
plaincopy[/b]
[b]else if (strcmp(argv[1], "install-tap") == 0) { [/b]
[b] printf("执行install-tap /n"); [/b]
[b] mac_ = (Mac*)TclObject::lookup(argv[2]); [/b]
[b] if (mac_ == 0) return TCL_ERROR; [/b]
[b] mac_->installTap(this); [/b]
[b] return TCL_OK; [/b]
[b]} [/b]
实现AODV::tap()函数
[b][cpp] view
plaincopy[/b]
[b]void [/b]
[b]AODV::tap(const Packet *p) { [/b]
[b] struct hdr_cmn *ch = HDR_CMN(p); [/b]
[b] struct hdr_ip *ih = HDR_IP(p); [/b]
[b] //sendToWatchdog(p); [/b]
[b] if(ch->ptype() == PT_AODV) //为AODV Packet [/b]
[b] { [/b]
[b] struct hdr_aodv *ah = HDR_AODV(p); [/b]
[b] switch(ah->ah_type) [/b]
[b] { [/b]
[b] case AODVTYPE_RREQ: [/b]
[b] Sniffer_readRREQ(p); [/b]
[b] break; [/b]
[b] case AODVTYPE_RREP: [/b]
[b] Sniffer_readRREP(p); [/b]
[b] break; [/b]
[b] default: [/b]
[b] break; [/b]
[b] } [/b]
[b] } [/b]
[b]} [/b]
这里面的我只监测邻居节点的件的RREQ和RREP数据包,并且对监测到的RREQ和RREP数据包之后作相应的处理
如函数Sniffer_readRREQ(p)和Sniffer_readRREP(p).这个两个函数可以根据你自己的需求来实现。这里不给出这两个函数的实现了。
这里我们也可以侦听数据报文,而不仅仅是控制报文。也就是说根据你自己的具体需求来定制。
接下来就是按照上面说的那样,定义你的IDS节点,并在你需要设置成为IDS节点的tcl脚本后面添加上
$i就是你要定义的IDS节点ID。
-------------------------------------
首先,我们知道在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
[cpp] view
plaincopy
#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()函数
[cpp] view
plaincopy
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
[b][cpp] view
plaincopy[/b]
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()函数中添加这一项:
[b][c-sharp] view
plaincopy[/b]
[b]else if (strcmp(argv[1], "install-tap") == 0) { [/b]
[b] printf("执行install-tap /n"); [/b]
[b] mac_ = (Mac*)TclObject::lookup(argv[2]); [/b]
[b] if (mac_ == 0) return TCL_ERROR; [/b]
[b] mac_->installTap(this); [/b]
[b] return TCL_OK; [/b]
[b]} [/b]
实现AODV::tap()函数
[b][cpp] view
plaincopy[/b]
[b]void [/b]
[b]AODV::tap(const Packet *p) { [/b]
[b] struct hdr_cmn *ch = HDR_CMN(p); [/b]
[b] struct hdr_ip *ih = HDR_IP(p); [/b]
[b] //sendToWatchdog(p); [/b]
[b] if(ch->ptype() == PT_AODV) //为AODV Packet [/b]
[b] { [/b]
[b] struct hdr_aodv *ah = HDR_AODV(p); [/b]
[b] switch(ah->ah_type) [/b]
[b] { [/b]
[b] case AODVTYPE_RREQ: [/b]
[b] Sniffer_readRREQ(p); [/b]
[b] break; [/b]
[b] case AODVTYPE_RREP: [/b]
[b] Sniffer_readRREP(p); [/b]
[b] break; [/b]
[b] default: [/b]
[b] break; [/b]
[b] } [/b]
[b] } [/b]
[b]} [/b]
这里面的我只监测邻居节点的件的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)中实现混杂模式并且实现邻居监测功能
- 黄聪:如何给wordpress的编辑器添加一个自定义按钮,并且实现插入功能
- 如何在NS-2 AODV协议中添加一种新的数据包类型[转载]
- 【转载】Java如何实现文件打包下载功能
- 如何使用三层架构设计模式去完整的实现一个功能?
- (转载)如何在WCF实现impersonnate客户端的功能
- 设计模式-观察者模式,以及如何使用观察者来为app实现即时通讯功能
- C#如何实现记住密码,自动登录功能?【转载】
- 如何用API函数实现网上邻居的功能?
- 关于如何实现美团网的导航功能并且能重用ListView的Item(下载免费了)
- js对象如何实现数组索引功能并且自定义自己的方法 (4种方法)
- 如何在emacs中打开shell模式时实现shell命令记忆功能
- oracle审计功能如何实现启动关闭功能
- 如何实现RibbonX功能卡切换的响应事件
- Android应用如何监听自己是否被卸载及卸载反馈功能的实现(转)
- 如何设置outlook实现自动秘密抄送邮件的功能?
- asp如何实现像类接口的功能
- 如何快速安装WIZ610WI实现串口转无线网功能?