【用java实现tcp/ip】2、使用jpcap模拟数据链路层

OSI参考模型:开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),
在TCP/IP协议簇中网络接口层对应于OSI的物理层和数据链路层,网络接口层实际上并不是因特网协议组中的一部分,它与OSI模型中的物理层和数据链路层对应。

物理层包含了多种与物理介质相关的协议,这些物理介质用以支撑TCP/IP通信,数据链路层包含了控制物理层的协议,比如如何访问介质。上层协议把数据封装好之后,要经过数据链路层来控制物理层(比如网卡硬件)把数据转换成电信号发送出去,另一端的网卡硬件接收到电信号在通过数据链路层一层一层的上传到上层的协议。这一节,我们就集中在数据链路层的实现上。

1、获取可用的网卡硬件

电脑中只有一个是可以用来收发数据的网卡,其他的是虚拟网卡,我们要找出真正的网卡,

package dataLinkLayer;
import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;

public class ProtocolEntry {
   
    public static void main(String[] args) {
   
        NetworkInterface device = getDevice();
        System.out.println("真实网卡名称:" + device.name);
    }
    
    private static NetworkInterface getDevice() {
   
        // 获取网卡列表
        NetworkInterface[] deviceList = JpcapCaptor.getDeviceList();
        // 其中就一个是真实的网卡,其他的是虚拟网卡,是不能发送数据的。
        System.out.println("共有网卡数量:" + deviceList.length);
        // 找到真实的网卡
        int index = 0;
        if (deviceList.length > 1) {
   
            index = 1;
        }
        return deviceList[index];
    }
}

打印结果:

共有网卡数量:6
真实网卡名称:\Device\NPF_{B3DA4FD7-C889-42E4-BDD5-CD6FFE81A668}

2、模拟数据链路层

jpcap要想从网卡获取数据,我们创建DataLinkLayer类并且实现PacketReceiver接口,然后把DataLinkLayer类的实例作为参数传入lpcap的loopPacket函数来监听我们的网卡。
下面是DataLinkLayer类,

public class D
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值