官方首页
 计算机科学与技术
 湖畔文学
 星之传说
 蓝色湖畔桃园
 湖畔艺术
 湖畔科技
 本站留言
热门关键字:    dreamlandcn.com    蓝色湖畔
 >>相关文章
·从内存中加载并运行exe
·OK3W v4.7文章管理系统
·用c++写的简单的arp欺骗检
·支持serv-u 7.x的as
·支持serv-u 7.x的as
·rar.exe在提权中的妙用
·SQL Server循环插入记
·在sql server 中执行
·Access注射点读取MSSQ
·使用委托实现用户控件与父页面的
 >>点击排行TOP10
·多种排序算法,多种语言讲解(前言)
·多种排序算法,多种语言讲解(简单选
·QQ空间代码 最新代码 9月最新可
·c#网络应用编程基础 第5章 Wi
·【其它欣赏】少儿不宜的设计
·c#网络应用编程基础 第5章 Wi
·多种排序算法,多种语言讲解(冒泡排
·QQ空间免费代码 小窝模式免费导航
·多种排序算法,多种语言讲解(堆排序
·VC中使用GetModuleFil
·多种排序算法,多种语言讲解(快速排
·多种排序算法,多种语言讲解(树形选
·QQ空间免费黑色皮肤背景代码,绝对
·Visual Studio 200
·如何使用EasyRecovery找
 
 当前位置:网站首页 > 计算机科学与技术 > 网页技术 > 网络安全 > 浏览正文
用c++写的简单的arp欺骗检测工具
作者:佚名    来源:本站原创    点击数:   更新时间:2010年02月03 【字体:

原理:
需要将网关ip地址写入gateway.ini,第一次运行的时候自动生成mac.ini文件,保存网关原始的mac地址,每两秒钟自动获取一次网关ip跟原始的mac做对比,不对则提示。

对于c++操作ini文件的还是没搞定,用了两个配置文件。  
主要代码如下:  

//////////////////////////////

#include <stdafx.h>
#include "iostream"
#include "fstream"
#include "string"
#include "windows.h"
#include "Iphlpapi.h"

#pragma comment(lib , "IpHlpApi.lib")
#pragma comment(lib , "ws2_32.lib")

#define MACFILE "mac.ini" //mac配置文件
#define GATEWAY "gateway.ini"//网关地址文件

using namespace std;
int main(int argc,char * argv[])
{
string ipadd;
string macadd;
char bc;
//读取网关ip地址
fstream _ipadd;
_ipadd.open(GATEWAY,ios::in);
while(_ipadd.get(bc))
{
ipadd+=bc;

}
cout << "ARP欺骗检查工具 By:Neeao \n";
cout << "网关IP:" << ipadd << endl;

int iReturn;
DWORD dwIP;
BYTE byMAC[6];
DWORD dwLen;
WSADATA WsaData;
WSAStartup(MAKEWORD(2, 0), &WsaData);

dwIP = inet_addr(ipadd.c_str());
//cout << dwIP <<"\n";
if (dwIP == INADDR_NONE)
{
cout << "IP地址出错: " << ipadd;
return 1;
}
//循环获取mac地址
while(TRUE)
{

// 发送ARP查询包获得 MAC 地址
dwLen = 6;
iReturn = SendARP(dwIP, 0, (PULONG) &byMAC, &dwLen);
if (iReturn != NO_ERROR)
{
printf("出错了:只能获取当前网关下主机的MAC地址.\n", argv[1]);
//__leave;
return 1;
}

char MACadd[50];
sprintf(MACadd,"%.2X-%.2X-%.2X-%.2X-%.2X-%.2X",byMAC[0],byMAC[1],byMAC[2],byMAC[3],byMAC[4],byMAC[5]);
//cout << MACadd;

//判断macadd是否为空,不为空直接跳过
if(macadd=="")
{
fstream _mac;
_mac.open(MACFILE,ios::in);
if(!_mac)
{
//cout<<MACFILE<<"没有被创建";
//第一次运行写入mac地址,为初始mac地址。
fstream _macr;
_macr.open(MACFILE,ios::out|ios::app);
if(!_macr)
{
cout<<"文件创建失败,磁盘不可写或者文件为只读!";
exit(1);
}
_macr << MACadd;
_macr.close();
macadd = MACadd;
}
else
{
char ch;
string content;
while(_mac.get(ch))
{
content+=ch;

}
_mac.close();
macadd = content;

cout<< "MAC地址为:" <<content<< endl;

}
}
//判断mac地址
if(macadd==MACadd)
{
cout << "ok\n";
//return 1;
}else
{
cout << "MAC地址被修改了\n";
//return 1;
}
Sleep(2000);//每2秒钟获取一次
}
return 0;
}

寂寞友情提示:简单浅显的代码表达ARP基本步骤,适合不理解ARP原理的同学

Tags:dreamlandcn.com
Google
关于我们 | 服务指南 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 | 诚征英才  | 友情链接
Powered by ACTCMS 2.0
Copyrights©2008-2009 蓝色湖畔 www.dreamlandcn.comAll Rights Reserved. 滇ICP备05000680号