一个分析Linux ARP日志的源代码程序

转载 2007年09月13日 15:09:00

#include <iostream>
#include <string>
#include <fstream>
#include <list>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
typedef list<string> ListStr;
typedef set<string> SetStr;
typedef ListStr::iterator Iter;
typedef SetStr::iterator s_iter;
typedef basic_string<char>::size_type S_T;
static S_T npos = -1;
string CONFIG_FILE;
string LOG_FILE;
const string DEFAULT_CONFIG_FILE="/root/config.txt";
const string DEFAULT_LOG_FILE="/root/log.log";
////////////////////////////////////////////////////////
//Func Define
////////////////////////////////////////////////////////
void splitstr(const string& _source,const string& _split,ListStr& _ls);

vector<string> split(const string& src, string delimit, string null_subst);

bool IsInMACAndIP(const ListStr& _ls,const string& _s);

int ParseArg(int argc,char *argv[]);

string getip(const string& _s);

string getmac(const string& _s);

int main(int argc,char *argv[]){
/////////////////////////////////////////////////////////////
//Define Data
/////////////////////////////////////////////////////////////
  ListStr IPAndMac;
  ListStr LogStr;
  ListStr ExecLogStrCount;
  SetStr ExecLogStr;
  Iter i_im;
  Iter i_ls;
  s_iter s_i;
//////////////////////////////////////////////////////////////
//Initial Data
//////////////////////////////////////////////////////////////
//
  int i_r = ParseArg(argc,argv);
  if(i_r <= 0){
    cout << "Error Params" << endl;
    exit(0);
  }else{
 
    fstream fs_config(CONFIG_FILE.c_str());
    //cout << CONFIG_FILE << endl;
    fstream fs_log(LOG_FILE.c_str());
    //cout << LOG_FILE << endl;
    IPAndMac.clear();
    LogStr.clear();
    ExecLogStr.clear();
    ExecLogStr.clear();
///////////////////////////////////////////////////////////////
//Exception
///////////////////////////////////////////////////////////////
    if(!fs_config ){
      cout <<"Can not Open Config File " <<CONFIG_FILE <<  endl;
      exit(0);
    }
    if(!fs_log){
      cout <<" Can not Open Log File " << LOG_FILE << endl;
      exit(0);
    }
    else{
////////////////////////////////////////////////////////////
//Read Config
///////////////////////////////////////////////////////////
      string s_config_line;
      while(getline(fs_config,s_config_line)){
        IPAndMac.push_back(s_config_line);
      }
//////////////////////////////////////////////////////////
//Read Log
////////////////////////////////////////////////////////////
      string s_log_line;
      while(getline(fs_log,s_log_line)){
        LogStr.push_back(s_log_line);
      }
//////////////////////////////////////////////////////////
//Do Test Data
/////////////////////////////////////////////////////////
    // NOw Get All Default Mac And Data
    //For LogStr
      //Get ARP IP And Mac
      //Is In IP And Mac
        //if In
        //else not  >>>>>> Arp Attack Cout IP And Address
      for(i_ls = LogStr.begin(); i_ls != LogStr.end() ; ++ i_ls){
        vector<string> v = split(*i_ls," ","");
        string s_IP = v[9];
        string s_MAC = v[1];
        string s_temp = s_MAC + "=" + s_IP;
        ExecLogStr.insert(s_temp);
        ExecLogStrCount.push_back(s_temp);
      }

      for(s_i = ExecLogStr.begin(); s_i != ExecLogStr.end(); ++ s_i){
        if(!IsInMACAndIP(IPAndMac,*s_i)){
          int i_num = count(ExecLogStrCount.begin(),ExecLogStrCount.end(),*s_i);
          cout << "The Computer@@@" << *s_i <<"@@@Attack@@@" <<i_num <<"@@@Times!"<< endl;
        }

      }

    }
    return 0;
  }
}
string getip(const string& _s){
  return "";
}

string getmac(const string& _s){
  return "";
}
void splitstr(const string& _source,const string& _split,ListStr& _ls){
  //todo:
  _ls.clear();
  string strtemp;
  strtemp = _source;
  string::size_type len = _source.length();
  string::size_type itmp = strtemp.find(_split);
  do{
    _ls.push_back(strtemp.substr(0,itmp));
    //cout << strtemp.substr(0,itmp) << endl;
   
    if(len-itmp-1 > 0){
      //cout << strtemp << endl;
      strtemp = strtemp.substr(itmp+1,len-itmp-1);
      //cout << strtemp << endl;
      itmp = strtemp.find(_split);
      len = strtemp.length();
    }
    else{
      cout << 2 << endl;
      break;
    }
  }while( itmp>0 );
  //ListStr.push_back(_source.substr(0,i1));
  //cout << _source.substr(0,i1) << endl;
  //cout << _source.substr(i1+1,len-i1-2)<< endl;
  //cout << il << endl;
}
bool IsInMACAndIP(const ListStr& _ls,const string& _s){
  ListStr::const_iterator i = find(_ls.begin(),_ls.end(),_s);
  if(i == _ls.end()){
    return false;
  }
  else{
    return true;
  }
}
vector<string> split(const string& src, string delimit, string null_subst="")
{
  if( src.empty() || delimit.empty() ) throw "split: empty string/0";

  vector<string> v;
  S_T deli_len = delimit.size();
  long index = npos, last_search_position = 0;
  while( (index=src.find(delimit, last_search_position))!=npos )
  {
    if(index==last_search_position)
      v.push_back(null_subst);
    else
      v.push_back( src.substr(last_search_position, index-last_search_position) );
    last_search_position = index + deli_len;
  }
  string last_one = src.substr(last_search_position);
  v.push_back( last_one.empty()? null_subst:last_one );
  return v;
}

int ParseArg(int argc,char *argv[]){
  /*
  for(int i = 0 ; i < argc ; i++)
  {
    //cout << argc << endl;
    cout << argv[i] << endl;
  }
  */
  if(argc == 1){
    CONFIG_FILE = DEFAULT_CONFIG_FILE;
    LOG_FILE = DEFAULT_LOG_FILE;
    return argc;
  }
  else if(argc == 3){
    //cout << 3333 << endl;
    char tbuf[256];
    strcpy(tbuf,argv[1]);
    string s_temp = (string)(tbuf);
    if(s_temp == "-c"){
      //cout << 1111 << endl;
      char buf[256];
      strcpy(buf,argv[2]);
      CONFIG_FILE = (string)(buf);
      LOG_FILE = DEFAULT_LOG_FILE;
      //cout << CONFIG_FILE << endl;
      return argc;
    }
    if(argv[1] == "-l"){
      char buf[256];
      strcpy(buf,argv[2]);
      LOG_FILE = (string)(buf);
      CONFIG_FILE = DEFAULT_CONFIG_FILE;
      //cout << LOG_FILE << endl;
      return argc;
    }
  }
  else if(argc == 5){
    char tbuf1[256];
    strcpy(tbuf1,argv[1]);
    string s_temp1 = (string)(tbuf1);

    char tbuf2[256];
    strcpy(tbuf2,argv[3]);
    string s_temp2 = (string)(tbuf2);
    if(s_temp1 == "-c" || s_temp1 == "-C")
      CONFIG_FILE = (string)argv[2];
    if(s_temp2 == "-l" || s_temp2 == "-L")
      LOG_FILE = (string)argv[4];
    //cout << CONFIG_FILE << "@@@@@" << LOG_FILE << endl;
    return argc;
  }
  else{
    return -1;
  }
}

 

相关文章推荐

一个简单的java源代码程序

  • 2009年09月23日 10:55
  • 731B
  • 下载

C#简单远程控制制作源代码程序以及思路(客户端)

远程控制的服务器端前面介绍过了 http://blog.csdn.net/a112634313/article/details/7941446 现在开始客户端的实现 客户端的实现也是很简单的...

一次性删除非源代码程序

  • 2015年04月11日 07:59
  • 16KB
  • 下载

非常好用的淘宝客ASP源代码程序

  • 2016年04月27日 00:17
  • 1.44MB
  • 下载

Linux下IP冲突检测程序源码及分析(利用免费arp)---感谢原作者

由于没有找到源代码的原作者, 所以就给出一个间接的转载地址:http://blog.csdn.net/wanxiao009/article/details/5622296, 再次感谢源代码原作者 ...
  • stpeace
  • stpeace
  • 2015年04月19日 18:15
  • 2470

关于c#源代码程序实战 part1

  • 2009年04月10日 22:37
  • 6.75MB
  • 下载

本人写的一个ARP防火墙源代码奉献(2)

;处理ARP包开始.只检测谁在伪装网关.把伪装ARP响应包改成ARP请求包并填写正确的网关MAC地址.         mov ebx,_lpPacket         mov ebx,[ebx...

ASP 办公软件系统源代码程序

  • 2010年07月28日 22:03
  • 1.3MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个分析Linux ARP日志的源代码程序
举报原因:
原因补充:

(最多只允许输入30个字)