用c++写的简单的arp欺骗检测工具

  1. [hide]原理:

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


  3. 对于c++操作ini文件的还是没搞定,用了两个配置文件。  

  4. 主要代码如下:


  5.     #include <stdafx.h>

  6.     #include "iostream"

  7.     #include "fstream"

  8.     #include "string"

  9.     #include "windows.h"

  10.     #include "Iphlpapi.h"


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

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


  13.     #define MACFILE "mac.ini" //mac配置文件

  14.     #define GATEWAY "gateway.ini"//网关地址文件


  15.     using namespace std;

  16.     int main(int argc,char * argv[])

  17.     {

  18.     string ipadd;

  19.     string macadd;

  20.     char bc;

  21.     //读取网关ip地址

  22.     fstream _ipadd;

  23.     _ipadd.open(GATEWAY,ios::in);

  24.     while(_ipadd.get(bc))

  25.     {

  26.     ipadd+=bc;


  27.     }

  28.     cout << "ARP欺骗检查工具 By:Neeao \n";

  29.     cout << "网关IP:" << ipadd << endl;


  30.     int iReturn;

  31.     DWORD dwIP;

  32.     BYTE byMAC[6];

  33.     DWORD dwLen;

  34.     WSADATA WsaData;

  35.     WSAStartup(MAKEWORD(2, 0), &WsaData);


  36.     dwIP = inet_addr(ipadd.c_str());

  37.     //cout << dwIP <<"\n";

  38.     if (dwIP == INADDR_NONE)

  39.     {

  40.     cout << "IP地址出错: " << ipadd;

  41.     return 1;

  42.     }

  43.     //循环获取mac地址

  44.     while(TRUE)

  45.     {


  46.     // 发送ARP查询包获得 MAC 地址

  47.     dwLen = 6;

  48.     iReturn = SendARP(dwIP, 0, (PULONG) &byMAC, &dwLen);

  49.     if (iReturn != NO_ERROR)

  50.     {

  51.     printf("出错了:只能获取当前网关下主机的MAC地址.\n", argv[1]);

  52.     //__leave;

  53.     return 1;

  54.     }


  55.     char MACadd[50];

  56.     sprintf(MACadd,"%.2X-%.2X-%.2X-%.2X-%.2X-%.2X",byMAC[0],byMAC[1],byMAC[2],byMAC[3],byMAC[4],byMAC[5]);

  57.     //cout << MACadd;


  58.     //判断macadd是否为空,不为空直接跳过

  59.     if(macadd=="")

  60.     {

  61.     fstream _mac;

  62.     _mac.open(MACFILE,ios::in);

  63.     if(!_mac)

  64.     {

  65.     //cout<<MACFILE<<"没有被创建";

  66.     //第一次运行写入mac地址,为初始mac地址。

  67.     fstream _macr;

  68.     _macr.open(MACFILE,ios::out|ios::app);

  69.     if(!_macr)

  70.     {

  71.     cout<<"文件创建失败,磁盘不可写或者文件为只读!";

  72.     exit(1);

  73.     }

  74.     _macr << MACadd;

  75.     _macr.close();

  76.     macadd = MACadd;

  77.     }

  78.     else

  79.     {

  80.     char ch;

  81.     string content;

  82.     while(_mac.get(ch))

  83.     {

  84.     content+=ch;


  85.     }

  86.     _mac.close();

  87.     macadd = content;


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


  89.     }

  90.     }

  91.     //判断mac地址

  92.     if(macadd==MACadd)

  93.     {

  94.     cout << "ok\n";

  95.     //return 1;

  96.     }else

  97.     {

  98.     cout << "MAC地址被修改了\n";

  99.     //return 1;

  100.     }

  101.     Sleep(2000);//每2秒钟获取一次

  102.     }

  103.     return 0;

  104.     }[/hide]
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值