伸进女同桌乳沟里摸爽了,小雪解开乳罩给老杨摸,少妇被按摩师摸高潮了,亲嘴扒胸摸屁股激烈视频,强摸秘书人妻大乳BD,摸BBB揉BBB揉BBB视频

新疆軟件開發(fā)

本站首頁 軟件開發(fā) 成功案例 公司新聞 公司簡(jiǎn)介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> 開發(fā)語言 >> 文章正文

delphi實(shí)現(xiàn)利用arp欺騙來實(shí)現(xiàn)計(jì)費(fèi)功能

  
     前段時(shí)間接到一個(gè)項(xiàng)目,該項(xiàng)目要求在局域網(wǎng)內(nèi)的任何一臺(tái)計(jì)算機(jī)上安裝一套計(jì)費(fèi)軟件,其他的客戶端不用安裝任何軟件,只要客戶插入網(wǎng)線就可以計(jì)費(fèi)。以前接觸到的計(jì)費(fèi)軟件都是安裝在網(wǎng)關(guān)上的,要么就是要安裝客戶端軟件,如何實(shí)現(xiàn)這樣的功能呢?研究了一下,發(fā)現(xiàn)用arp欺騙的原理可以實(shí)現(xiàn)計(jì)費(fèi)的功能,原理是在未開通上網(wǎng)功能的客戶端插入網(wǎng)線后,先禁止局域網(wǎng)內(nèi)的該計(jì)算機(jī)上網(wǎng),等該客戶端要求管理員開通上網(wǎng)功能后再解除對(duì)該客戶端的阻止并開始計(jì)費(fèi)。arp欺騙相信大家的都不陌生,網(wǎng)上有好多介紹arp欺騙的文章,也有好多arp欺騙的病毒,在這里就不再重復(fù)arp欺騙的原理了。

      如何阻止局域網(wǎng)指定的客戶端上網(wǎng)呢?
用偽造的arp的請(qǐng)求包刷新要阻止機(jī)器的arp表,使之認(rèn)為網(wǎng)關(guān)的mac地址為一個(gè)不存在的mac地址,這樣的話就可以阻止該機(jī)器上網(wǎng)了。

假設(shè)要阻止的計(jì)算機(jī)是A,安裝計(jì)費(fèi)軟件的計(jì)算機(jī)是B,網(wǎng)關(guān)是C

A機(jī)器  MAC:AA-AA-AA-AA-AA-AA  IP地址:192.168.1.1

B機(jī)器  MAC:BB-BB-BB-BB-BB-BB  IP地址:192.168.1.2

C網(wǎng)關(guān)  MAC:CC-CC-CC-CC-CC-CC  IP地址:192.168.1.253


在網(wǎng)上有好多arp例子都是c的,我用delphi和Winpcap實(shí)現(xiàn)代碼如下:
 
安裝Winpcap,引用:winsock,Packet32,shellapi單元

類型和常量定義:
type
  TMacAddr = array [0..5] of byte ;
  TEHHDR=packed record
     Ether_Dest: TMacAddr ;  {目的地址 }
     Ether_Src: TMacAddr ;   {源地址 }
     Ether_Type:Word;        {類型 }
  end;
  PEHHDR=^TEHHDR;
  TEtherData=packed record      {Ethernet packet data}
   Ether_hrd:WORD;       {hardware address }
   Ether_pro:WORD; {format of protocol address }
   Ether_hln: byte; {byte length of each hardware address }
   Ether_pln: byte; {byte length of each protocol address}
    Ether_op:WORD; { ARP or RARP }
     Ether_sha:TMacAddr; {hardware address of sender}
     Ether_spa:LongWord; {protocol address of sender}
     Ether_tha:TMacAddr; {hardware address of target}
     Ether_tpa:LongWord;   {protocol address of target}
  end;
  PARPHDR=^TEtherData;

  TARPPACKET=packed record
      EHHDR:Tehhdr;
      EtherData:TEtherData;
   end ;
 PARPPACKET=^TARPPACKET;

const
 INADDR_NONE = $FFFFFFFF;
 EPT_IP  = $0800;
 EPT_ARP = $0806 ;
 EPT_RARP =$8035 ;
 ARP_REPLY =$0002 ;
 ARP_REQUEST =  $0001 ;
 ARP_HARDWARE =$0001 ; 

 function inet_addr(const cp: PChar): DWord; stdcall; external 'WS2_32.DLL' name 'inet_addr';

//別人的代碼
function     HexStrtoInt(var   Buf:   string):   dword;
  //將十六進(jìn)制的字符串轉(zhuǎn)成整型
      //判斷是否是十六進(jìn)制數(shù)
      function   IsHexChar(Chr:   char):   boolean;
      begin
          Result   :=   (Chr   in   ['0'..'9'])   or   (Chr   in   ['A'..'F']);
      end;
      //將一個(gè)十六進(jìn)制字符轉(zhuǎn)換成數(shù)
      function   HexChrtoInt(Chr:   char):   byte;
      begin
          Result   :=   0;
          case   Chr   of
              '0'..'9'   :   Result   :=   Strtoint(Chr);
              'A'             :   Result   :=   10;
              'B'             :   Result   :=   11;
              'C'             :   Result   :=   12;
              'D'             :   Result   :=   13;
              'E'             :   Result   :=   14;
              'F'             :   Result   :=   15;
          end;
      end;
  var
      BufLength:   dword;
      TempBuf:   string;  
      Count0:   dword;  
  begin
      Result   :=   0;  
      BufLength   :=   Length(Buf);
      TempBuf   :=   '';  
      if   BufLength   >   0   then   begin
          Buf   :=   Uppercase(Buf);  
  //         for   Count0   :=   1   to   BufLength  
          if   BufLength   mod   2   =   1   then   begin  
              Buf   :=   '0'   +   Buf;  
              BufLength   :=   Length(Buf);
          end;
          for   Count0   :=   1   to   BufLength   div   2   do  
              if   IsHexChar(Buf[Count0   *   2   -   1])   then   begin  
                  if   IsHexChar(Buf[Count0   *   2])   then   begin  
                      TempBuf   :=   TempBuf   +   inttostr(HexChrtoInt(Buf[Count0   *   2   -   1])

  *   16   +   HexChrtoInt(Buf[Count0   *   2]));
                  end   else   begin
                      Result   :=   Count0   *   2;  
                      Break;  
                  end;  
              end   else   begin
                  Result   :=   Count0   *   2   -   1;  
                  Break;  
              end;
          if   Result   =   0   then   Buf   :=   TempBuf;
      end;
  end;

//MAC轉(zhuǎn)換
procedure GetMac(s : string;var Mac : TMacAddr);

  var
  hs : string;
  p : integer;
  i,j:integer;

begin
 FillChar (Mac, SizeOf (Mac), 0) ;

  i:=0;
  if Length(s)=0 then
    Exit;
  p:=Pos('-',s);
  while P<>0 do
  begin
    hs:=Copy(s,1,p-1);
    HexStrtoInt(hs);
    Mac[i]:=  strtoint(hs) ;
    Delete(s,1,p);
    p:=Pos('-',s);
    i:=i+1;
  end;
  if Length(s)>0 then
  begin
     HexStrtoInt(s);
     Mac[i]:=strtoint(s);
  end;
end;

 

{禁止上網(wǎng),發(fā)送arp請(qǐng)求包,這里的C_mac為偽造的C的mac地址}
procedure SendArp(A_ip:string;A_mac:string;B_ip:string;B_mac:string;C_IP:string;C_mac:string);
var
ulMACAddr: TMacAddr;
EHHDR:TEHHDR;
EtherData:TEtherData;
pp:pPacket;
lpAdapter:Padapter;
BUF:Array [0..512] of char ;

begin
    //以太網(wǎng)包首部
    GetMac(A_mac,ulMACAddr);
    Move(ulMACAddr , EHHDR.Ether_Dest,6);//目的地址-A計(jì)算機(jī)的地址
    GetMac(C_mac,ulMACAddr);
    Move(ulMACAddr , EHHDR.Ether_Src,6);//偽造的源地址-C計(jì)算機(jī)的地址
    EHHDR.Ether_Type  := htons(EPT_ARP);//arp包
   
    //構(gòu)造以太網(wǎng)包數(shù)據(jù)
    EtherData.Ether_hrd := htons(ARP_HARDWARE);
    EtherData.Ether_pro := htons(EPT_IP);
    EtherData.Ether_hln := 6;
    EtherData.Ether_pln := 4;
    EtherData.Ether_op  := htons(ARP_REQUEST);//arp請(qǐng)求包
    GetMac(C_mac,ulMACAddr);
    Move(ulMACAddr , EtherData.Ether_sha,6);
    EtherData.Ether_spa := inet_addr(Pchar(B_IP)); 
    GetMac(B_mac,ulMACAddr);
    Move(ulMACAddr , EtherData.Ether_tha,6);
    EtherData.Ether_tpa := inet_addr(Pchar(B_ip)); 


     lpAdapter := PacketOpenAdapter('\Device\NPF_{E00872C1-37C0-47CE-8472-313A5A23F896}');  // 根據(jù)

你網(wǎng)卡名字打開網(wǎng)卡,這是我網(wǎng)卡的設(shè)備名
     fillchar(BUF,sizeof(BUF),0);

     CopyMemory(@BUF,@EHHDR,SIZEOF(EHHDR));
     CopyMemory(Pointer(LongWord(@BUF)+SIZEOF(EHHDR)),@EtherData,SIZEOF(EtherData));
       // 分配內(nèi)存
     pp := PacketAllocatePacket();            

     //初始化結(jié)構(gòu)指針
     PacketInitPacket(pp, @BUF,512);
     //發(fā)arp應(yīng)答包
     PacketSendPacket(lpAdapter, pp, true);
    
     // 釋放內(nèi)存
     PacketFreePacket(pp);
     PacketCloseAdapter(lpAdapter);

end;

//調(diào)用示例
  SendArp('192.168.1.1','AA-AA-AA-AA-AA-AA','192.168.1.2','BB-BB-BB-BB-BB-BB','192.168.1.253','00-00-00-00-00-00');


{解除阻止,發(fā)送arp應(yīng)答包,這里的C_mac為真實(shí)的C的mac地址}
procedure SendArpReply(A_ip:string;A_mac:string;C_ip:string;C_mac:string;B_mac:string);
var
ulMACAddr: TMacAddr;
EHHDR:TEHHDR;
EtherData:TEtherData;
pp:pPacket;
lpAdapter:Padapter;
BUF:Array [0..512] of char ;

begin
    GetMac(A_mac,ulMACAddr);
    Move(ulMACAddr , EHHDR.Ether_Dest,6);
    GetMac(B_mac,ulMACAddr);
    Move(ulMACAddr , EHHDR.Ether_Src,6);
    EHHDR.Ether_Type  := htons(EPT_ARP);
    EtherData.Ether_hrd := htons(ARP_HARDWARE);
    EtherData.Ether_pro := htons(EPT_IP);
    EtherData.Ether_hln := 6;
    EtherData.Ether_pln := 4;
    EtherData.Ether_op  := htons(ARP_REPLY);//arp應(yīng)答包
    GetMac(C_mac,ulMACAddr);
    Move(ulMACAddr , EtherData.Ether_sha,6);
    EtherData.Ether_spa := inet_addr(Pchar(C_ip));  
    GetMac(A_mac,ulMACAddr);
    Move(ulMACAddr , EtherData.Ether_tha,6);
    EtherData.Ether_tpa := inet_addr(Pchar(A_ip)); 

     // 根據(jù)自己網(wǎng)卡的設(shè)備名打開網(wǎng)卡
     lpAdapter := PacketOpenAdapter('\Device\NPF_{E00872C1-37C0-47CE-8472-313A5A23F896}');
   
     fillchar(BUF,sizeof(BUF),0);
     CopyMemory(@BUF,@EHHDR,SIZEOF(EHHDR));
     CopyMemory(Pointer(LongWord(@BUF)+SIZEOF(EHHDR)),@EtherData,SIZEOF(EtherData));

     // 分配內(nèi)存
     pp := PacketAllocatePacket();            

     //初始化結(jié)構(gòu)指針
     PacketInitPacket(pp, @BUF,512);
     //發(fā)arp應(yīng)答包
     PacketSendPacket(lpAdapter, pp, true);
    
     // 釋放內(nèi)存
     PacketFreePacket(pp);
     PacketCloseAdapter(lpAdapter);
end;

//調(diào)用示例
 SendArpReply('192.168.1.1','AA-AA-AA-AA-AA-AA','192.168.1.253','CC-CC-CC-CC-CC-CC','BB-BB-BB-BB-BB-BB');

需要注意的是,發(fā)出偽造的arp請(qǐng)求包過一段時(shí)間后會(huì)被刷新為正確的,所以每隔一段時(shí)間要向被阻止的機(jī)器發(fā)送一個(gè)arp包,這樣才能達(dá)到阻止上網(wǎng)的目的。

 本文來源于 新疆二域軟件開發(fā)網(wǎng)  http://www.zgna.net  轉(zhuǎn)載請(qǐng)注明出處

作者:xjzcg | 文章來源:本站原創(chuàng) | 更新時(shí)間:2008-3-21 15:45:14

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    一個(gè)delphi開發(fā)托盤程序的例子
    了解delphi過程類型/過程類型學(xué)習(xí)
    BLOB是如何使用的
    GB/Unicode/GBK之間的轉(zhuǎn)換
    delphi使用技藝大全
    在桌面中嵌入窗體
    軟件技術(shù)
    · 開發(fā)語言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫開發(fā)
    最新文章  
    ·搜集整理的asp.net的驗(yàn)證方
    ·各種FOR循環(huán)結(jié)構(gòu)的整理
    ·軟件項(xiàng)目開發(fā)中應(yīng)該考慮那
    ·搜集整理的javascript sel
    ·軟件開發(fā)中項(xiàng)目經(jīng)理有那些
    ·學(xué)習(xí)如何在Lambda表達(dá)式進(jìn)
    ·C++基礎(chǔ)知識(shí):結(jié)構(gòu)體數(shù)據(jù)的
    ·C#實(shí)現(xiàn)短信發(fā)送程序的例子
    ·sun最近修補(bǔ)了一部分java的
    ·rss定制的另外一種實(shí)現(xiàn)方式
    ·delphi實(shí)現(xiàn)利用arp欺騙來實(shí)
    ·基礎(chǔ)學(xué)習(xí):基于WF的流程框
    ·網(wǎng)絡(luò)編程中怎樣得知一次數(shù)
    ·如何逆序輸出單鏈表?
    ·軟件開發(fā)過程中的性能設(shè)計(jì)
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) www.zgna.net All Rights Reserved 新ICP備14003571號(hào)
    新疆軟件開發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000
     
    满洲里市| 香港 | 德庆县| 德清县| 衡阳市| 贵州省| 思茅市| 塔河县| 娱乐| 白沙| 荣昌县| 长兴县| 连平县| 靖远县| 中江县| 新营市| 保康县| 临漳县| 通山县| 梁山县| 兴仁县| 礼泉县| 淮安市| 无棣县| 西丰县| 财经| 河源市| 盱眙县| 中卫市| 澄城县| 阳谷县| 庆城县| 广东省| 汶川县| 冷水江市| 社旗县| 西平县| 家居| 无极县| 枝江市| 武鸣县|