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