⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 search.java

📁 自己做的基于jpcap+winpcap的
💻 JAVA
字号:
import java.net.Inet4Address; 
import java.net.InetAddress; 
import java.util.Arrays; 
import jpcap.*; 
import jpcap.packet.*; 
import java.io.*;
import java.util.Vector;
class search implements Runnable { 
     //发现本机器的网络接口,得到本机所有的网络适配器
    NetworkInterface[] devices=JpcapCaptor.getDeviceList(); 
    InetAddress srcip=null;   
    NetworkInterface device; 
     //填写全1广播mac目标地址 
    byte[] broadcast=new byte[]{(byte)255,(byte)255,(byte)255,(byte)255,(byte)255,(byte)255};
    int i; 
    int head;
    int end;
    long newLength=0;
    String netAddress;
    ARPPacket arp;
    EthernetPacket ether;
    JpcapCaptor captor;  
    JpcapSender sender;
    RandomAccessFile file;
  public search(){
       try {
            file=new RandomAccessFile("searchLog.txt","rw");
            file.setLength(newLength); // 实现清空文件目的
            BufferedReader read=new BufferedReader(new InputStreamReader(System.in));
            System.out.print("请输入起始IP地址(1-254): ");
            String headIP=null;
            headIP=read.readLine();
            BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
            System.out.print("请输入结束IP地址(1-254): ");
            String endIP=null;
            endIP=reader.readLine();
            String nativeIP=InetAddress.getLocalHost().getHostAddress();
            i=nativeIP.lastIndexOf('.');
            this.head=Integer.parseInt(headIP);
            this.end=Integer.parseInt(endIP);
            this.netAddress=nativeIP.substring(0,i+1);
            init();
            new Thread(this).start();
      }
      catch(Exception e) {
           System.out.println("出现异常: "+e);
      }
   }
   public void init(){
      int index=0;
      if(devices.length>1)
         index=1;
      device=devices[index];
      try {
         captor=JpcapCaptor.openDevice(device,200,false,10);//开启网络接口,用于抓取包和读取包
         captor.setFilter("arp",true); //表明只接收arp帧
      }catch(IOException e){
             System.exit(0);
      }
      
      sender=captor.getJpcapSenderInstance(); //获取一个发送包类对象(使用同一个网络适配器)
      
        //获得接口地址,这里考虑到一网络接口可能有多地址 
      for(i=0;i<device.addresses.length;i++) 
            if(device.addresses[i].address instanceof Inet4Address){ 
                srcip=device.addresses[i].address; 
                break; 
            } 
    }
  
   public void run()  { 
    try {
       
       for(int j=head;j<=end;j++){
         
        String IP=netAddress+j;
        arp=new ARPPacket(); 
        arp.hardtype=ARPPacket.HARDTYPE_ETHER; //网络环境是以太网,(其他还有令牌环,帧中继)
        arp.prototype=ARPPacket.PROTOTYPE_IP; //为IP 协议类型
        arp.operation=ARPPacket.ARP_REQUEST; //arp动作类型,这里是arp请求
        arp.hlen=6; //硬件地址长度
        arp.plen=4; //协议地址长度
        arp.sender_hardaddr=device.mac_address; //arp发送源物理地址
        arp.sender_protoaddr=srcip.getAddress(); //arp发送源协议地址
        arp.target_hardaddr=broadcast; //arp目标物理地址,这里为广播
        arp.target_protoaddr=InetAddress.getByName(IP).getAddress();
         
        ether=new EthernetPacket(); 
        ether.frametype=EthernetPacket.ETHERTYPE_ARP; //以太网帧类型
        ether.src_mac=device.mac_address;  //发送源mac地址
        ether.dst_mac=broadcast; //目标mac地址为广播地址
        arp.datalink=ether; 
             //发送 
        sender.sendPacket(arp); 
            //处理回复 
        
        ARPPacket p=(ARPPacket)captor.getPacket();
        if(p==null) writeFile(p); 
        else 
             if(Arrays.equals(p.target_protoaddr,srcip.getAddress())) 
                   writeFile(p);
        
       }
      
       
      }
     catch(Exception e) {
        System.out.println("有异常"+e);
    }           
  } 
  public void writeFile(ARPPacket replyPacket) {
         if(replyPacket!=null) {
            try {
                byte[] ip=replyPacket.sender_protoaddr;
                byte[] mac=replyPacket.sender_hardaddr;
                
               
                file.write(ip);
                file.write(mac); 
                System.out.println(file.length());      
            } catch(Exception e){
                System.out.println("出现异常: "+e);
               }   
              
         }
        
   }
  public static void main(String args[]) {
       new search();
  }
 
  
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -