centos7安装libpcap和Jpcap环境

一.先装java环境(网上很多)
二.安装libpcap
    1.安装GCC:
    yum -y install gcc-c++

    2.安装flex: 
      yum -y install flex 
      没有flex,直接安装libpcap会提示"Your operating system's lex is insufficient to compile libpcap"错误;

    3.安装bison
      yum -y install bison
      前面安装的是flex,就需要搭配bison,如不会提示"don't have both flex and bison;reverting to lex/yacc"错误;

    4.安装 libpcap
      下载地址:http://www.tcpdump.org/

      下载版本:wget -c http://www.tcpdump.org/release/libpcap-1.9.1.tar.gz(也可以装新版的 我装的是1.9的  具体可以去官网下载)

       解压软件包:tar zxf libpcap-xxx...

      进入解压后的目录,输入命令行:
       命令如下:
      1).    ./configure
      2).    make
      3).    make install
       
     5.简单的例子测试一下libpcap:
      //新建文件 device.c 下面为内容
      
      #include <stdio.h>
      #include <pcap.h>
      int main(int argc,char *argv[]){
          char *dev, errbuf[PCAP_ERRBUF_SIZE];
          dev=pcap_lookupdev(errbuf);
          if(dev==NULL){
             fprintf(stderr,"couldn't find default device: %s\n",errbuf);
             return(2);
          }
          printf("Device: %s\n",dev);
          return(0);
      }

      
      编译指令:gcc -o device device.c -lpcap (执行成功会生成一个可执行文件)
      备注:编译时要使用libpcap的参数-lpcap,否则会提示“pcap_lookupdev 未定义的引用”的错误;
      运行指令:./device
      
      运行成功为显示个0什么玩意 我忘记了 不报错就行!
      
      
      运行遇到错误解决办法:

     error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file or xxx
      
     由于libpcap已经安装,所以是程序无法找到库所在的位置的原因。

        解决办法:将libpcap.so.1所在目录添加到文件/etc/ld.so.conf中
        

        打开ld.so.conf文件,然后添加一行/usr/local/lib 改成
        

        includeld.so.conf.d/*.conf //原来的内容

        /usr/local/lib
        

        然后保存,再终端下执行 ldconfig。

        再运行sniff程序,OK。
        
        --------------网上还有其他错误解决方案,其他的可以去问百度--------------

三、安装Jpcap

需要先下载项目 :https://download.csdn.net/download/qq_38806714/12563966  有积分直接下载 没有的话私信我留下邮箱 

     1.编译: 在./Jpcap/src/main/c中,执行
    
    make
    
    生成libjpcap.so文件(到这里生成成功后基本上就可以用了,网上代码很多 随意一个都行,调用方式大同小异)。
    
    
    
    这里有些人会报错 参考 https://blog.csdn.net/qqaazz211/article/details/78984953 可以使用指令
    
    
    2. 将生成的libjpcap.so文件拷贝到 $JAVA_HOME/jre/lib/amd64目录下;
        将 ./Jpcap/lib/jpcap.jar 拷到 $JAVA_HOME/jre/lib/ext目录下【jpcap.jar开始是复制到$JAVA_HOME/lib,但是不行就换成这个目录了】

    3.网上找的一个测试代码(项目里面也有测试类 需要编译后测试),是测网卡流量的:
            import java.io.IOException;  
            import java.util.Scanner;  
            import jpcap.*;  
            import jpcap.packet.*;  
            public class NetFetcher implements PacketReceiver{  
             
               @Override  
               public void receivePacket(Packet arg0) {  
                     
                   //将抓取的包进行输出  
                   System.out.println(arg0.caplen);  
                   TCPPacket tcp = (TCPPacket) arg0;
                   System.out.println("请求ip:" + tcp.src_ip + ",目标ip:" + tcp.dst_ip);
                   System.out.println("数据:");
                   System.out.println("**********************************");
            //for (int i = 0; i < tcp.data.length; i++) {
            //System.out.print((char) tcp.data[i]);
            //}
            //System.out.println(new String(tcp.data));
               }  
                 
               public static void main(String[] args){  
                     
                   //获得网卡设备列表  
                   NetworkInterface[] devices = JpcapCaptor.getDeviceList();  
                   if(devices.length==0){  
                         
                       System.out.println("无网卡信息!");  
                       return;  
                   }  
                   //输出网卡信息  
                   for(int i=0;i<devices.length;i++){  
                         
                       System.out.println("网卡"+i+"信息:"+devices[i].name);  
                       for(NetworkInterfaceAddress address:devices[i].addresses){  
                             
                           System.out.print(address.address+" ");  
                       }  
                       System.out.println("\n");  
                   }  
                     
                   Scanner scan = new Scanner(System.in);  
                   System.out.println("请选择您要监听的网卡序号:");  
                   int index = scan.nextInt();  
                     
                   //监听选中的网卡  
                   try {  
                       JpcapCaptor jpcapCaptor = JpcapCaptor.openDevice(devices[index], 2000, false, 20);  
                       jpcapCaptor.loopPacket(-1, new NetFetcher());  
                   } catch (IOException e) {  
                       // TODO Auto-generated catch block  
                       e.printStackTrace();  
                   }  
               }  
            }


        
      
      
      
      

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值