| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 306 人关注过本帖
标题:【求助】帮忙寻找这个代码的一个错误!
只看楼主 加入收藏
creep林
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2011-4-9
结帖率:66.67%
收藏
 问题点数:0 回复次数:0 
【求助】帮忙寻找这个代码的一个错误!
程序代码:
这是用C++写的一个简单的ARP欺骗检测工具。
我找了很久,都没找到这代码的一个重大错误在哪里、、、

我的原理是这样的: 
需要将网关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:Creep \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; 
}
搜索更多相关主题的帖子: ip地址 
2011-04-09 01:16
快速回复:【求助】帮忙寻找这个代码的一个错误!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024367 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved