功能设计:
在设计之初,本设计被期望实现下面功能:
①有一个对用户友好的操作界面,使用户对软件上手快和操作简单;
②能对网卡进行选择,选择用户自己需要进行监听抓包的网卡;
③能够侦听所有进出本主机的数据包,完整显示数据包网络层和传输层的头信息。比如,对IP头而言,需要显示版本、头长度、服务类型、数据包长度、标识、DF/MF标志、段内偏移、生存期、协议类型、源目的IP地址、选项内容,并且要求显示数据的实际含义;
④能够设置过滤规则,比如说侦听来源于指定IP地址的数据;
⑤显示接受到的TCP数据包的全部实际内容,并且要考虑一个TCP包划分为多个IP包传输的情况;
⑥功能验证手段,比如说,在运行网络嗅探器的同时,执行标准的Ping、Telnet和浏览网页等操作,检查网络嗅探器能否返回预期的结果。
具体实现:
1.选择网卡进行抓包:
(1)通过JpcapCaptor类的getDevices()函数获取主机的网卡信息:
public static NetworkInterface[] getDevices() {
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
return devices;
}
(2)将每个网卡添加到“网卡”菜单的菜单项中:
menuFile1 = new JMenu(" 网卡 ");
NetworkInterface[] devices = new NetworkCard().getDevices();
item = new JMenuItem[devices.length];
for (int i = 0; i < devices.length; i++) {
item[i] = new JMenuItem(i + ": " + devices[i].name + "("
+ devices[i].description + ")");
menuFile1.add(item[i]);
(3)对每个菜单项添加指定的动作侦听器,进行监听,当用户点击此处时将该网卡设为抓包网卡,并打开线程,使用JpcapCaptor.openDevice()打开网络接口,用captor.getPacket()进行抓包:
①添加动作侦听器:
item[i].addActionListener(
new CardActionListener(devices[i]));
②动作响应:
public void actionPerformed(ActionEvent e) {
allpackets.setDev