windows系统获取网卡信息

在抓包或者使用socket,或者监听端口时,如果使用的是pcap4j类库,就会用到网卡信息,那么怎么查看本机的网卡信息呢,Linux的比较方便,直接通过ifconfig命令就能看到,
windows的比较麻烦一点,因为一般会显示好多个,那么怎么判断是哪一个呢。
首先第一种,就是使用dumpcap.exe -D命令查看。
在这里插入图片描述
这种有时候看不出来,具体数据发送过来,是哪个网卡在接收,那么就要使用代码,看下详细信息。
我用的是这个包。

<dependency>
    <groupId>org.pcap4j</groupId>
    <artifactId>pcap4j-core</artifactId>
    <version>1.7.5</version>
</dependency>
<dependency>
    <groupId>org.pcap4j</groupId>
    <artifactId>pcap4j-packetfactory-static</artifactId>
    <version>1.7.5</version>
</dependency>

然后如下代码,就能看到每个网卡的详细信息:

try{
    List<PcapNetworkInterface> allDevices = Pcaps.findAllDevs();
    // 选择一个网络接口
    for (PcapNetworkInterface nif : allDevices) {
        System.out.println(nif.toString());
        System.out.println(nif.getName() + "-------------" + nif.getAddresses().toString());
    }
}catch (Exception ex){
    ex.printStackTrace();
}

里边能看到每个网卡绑定的IP信息,然后你的数据是发往哪个IP,就去哪个网卡去取,就行
然后再在代码里绑定使用的网卡,就可以监听具体的端口了

PcapHandle handle = null;
        try {
        //dev就是网卡名
            PcapNetworkInterface nif = Pcaps.getDevByName(dev);
            //PcapNetworkInterface nif = new NifSelector().selectNetworkInterface();
            handle = nif.openLive(snapLen, PcapNetworkInterface.PromiscuousMode.PROMISCUOUS, readTimeout);
            // 设置过滤器
            if (!filter.isEmpty()) {
            //filter就是筛选条件,和在wireshark里使用的条件类似,比如udp port 25400
                handle.setFilter(filter, BpfProgram.BpfCompileMode.OPTIMIZE);
            }
        }catch (PcapNativeException e){
            logger.error(e.toString(), e);
            System.exit(1);
        }catch (NotOpenException e){
            logger.error(e.toString(), e);
            System.exit(1);
        }catch (Exception e){
            logger.error(e.toString(), e);
        }
        if(null == handle)
            throw new CGnException("Set pcap4j Error, dev=" + dev + ",Fliter=" + filter);

        // 观察者模式,抓到报文回调gotPacket方法处理报文内容
        //byte[] codes = packet.getRawData();    这里就能取出端口上发送过来的数据
        PacketListener listener = new MyPacketListener(kafkaTemplate, handle, monIdx);
        // 直接使用loop无限循环处理包
        try {
            handle.loop(-1, listener); // COUNT设置为抓包个数,当为-1时无限抓包
        } catch (PcapNativeException e) {
            logger.error(e.toString(), e);
        }
        catch (InterruptedException e) {
            logger.error(e.toString(), e);
        }catch (Exception e){
            logger.error(e.toString(), e);
        }
        handle.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值