centos7安装libpcap和Jpcap环境

    技术2022-07-11  67

    一.先装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();                      }                  }               }

                                        

    Processed: 0.010, SQL: 9