七、
一、Main类
package mycapture;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Main extends JFrame implements ActionListener{
public capture cap=null;
JMenuBar menu=null;
JPanel pane=null;
JLabel nicname=null;
JComboBox nicselect=null;
JButton bstart=null;
JLabel macaddr=null;
JTextField macaddrtext=null;
JLabel description=null;
JTextField destext=null;
JTextArea packetdes=null;
JScrollPane spane=null;
JScrollPane spane2=null;
JTextArea packetori=null;
JLabel info=null;
JTextField infotext=null;
JButton Clear=null;
Thread fetchtrd=null;
public void init()
{
cap=new capture(this);
JMenuItem mopen=new JMenuItem("open");
JMenuItem msave=new JMenuItem("save");
JMenuItem mquit=new JMenuItem("quit");
javax.swing.JMenu mfile=new javax.swing.JMenu("File");
mfile.add(mopen);
mfile.add(msave);
mfile.addSeparator();
mfile.add(mquit);
JMenuItem mfilter=new JMenuItem("Filter");
javax.swing.JMenu mf=new javax.swing.JMenu("Filter");
mf.add(mfilter);
JMenuItem mcopy=new JMenuItem("Copy");
JMenuItem mfind=new JMenuItem("Find");
javax.swing.JMenu meedit=new javax.swing.JMenu("Edit");
meedit.add(mcopy);
meedit.add(mfind);
JMenuItem mdecode=new JMenuItem("Decode");
javax.swing.JMenu manalyse=new javax.swing.JMenu("Analyse");
manalyse.add(mdecode);
JMenuItem mtcp=new JMenuItem("Tcp");
javax.swing.JMenu mstatistics=new javax.swing.JMenu("Statistics");
mstatistics.add(mtcp);
JMenuItem mhelp=new JMenuItem("Help");
javax.swing.JMenu mmhelp=new javax.swing.JMenu("Help");
mmhelp.add(mhelp);
menu=new JMenuBar();
menu.add(mfile);
menu.add(mf);
menu.add(meedit);
menu.add(manalyse);
menu.add(mstatistics);
menu.add(mmhelp);
this.setJMenuBar(menu);
pane=new JPanel();
pane.setLayout(null);
nicname=new JLabel("NIC:");
nicname.setBounds(10,5,30,20);
pane.add(nicname);
nicselect=new JComboBox(cap.getNicName());
nicselect.setBounds(40,5,360,20);
pane.add(nicselect);
bstart=new JButton("Start");
bstart.setBounds(410, 5, 70, 20);
pane.add(bstart);
this.add(pane);
bstart.addActionListener(this);
macaddr=new JLabel("MAC:");
macaddr.setBounds(555,5,30,20);
pane.add(macaddr);
macaddrtext=new JTextField();
macaddrtext.setBounds(590,5,110,20);
pane.add(macaddrtext);
description=new JLabel("DataLink:");
description.setBounds(710,5,70,20);
pane.add(description);
destext=new JTextField();
destext.setBounds(770, 5, 60, 20);
pane.add(destext);
info=new JLabel("Description:");
info.setBounds(840,5,70,20);
pane.add(info);
Clear=new JButton("Clear");
Clear.setBounds(480,5,70,20);
pane.add(Clear);
Clear.addActionListener(this);
infotext=new JTextField();
infotext.setBounds(920, 5, 90, 20);
pane.add(infotext);
packetdes=new JTextArea();
packetori=new JTextArea();
spane=new JScrollPane(packetdes);
spane.setBounds(5, 30, 1000, 240);
JScrollBar bar =spane.getVerticalScrollBar();
bar.setValue(bar.getMaximum());
pane.add(spane);
spane2=new JScrollPane(packetori);
spane2.setBounds(5, 280, 1000, 240);
JScrollBar bar2 =spane2.getVerticalScrollBar();
bar2.setValue(bar2.getMaximum());
pane.add(spane2);
this.setTitle("Sniffer1.0 powered by Jpcap");
this.setSize(1030,600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.setLocation(100, 50);
}
private void JMenu(String string) {
// TODO Auto-generated method stub
}
public static void main(String []args)
{
Main mainwnd=new Main();
mainwnd.init();
}
@Override
public void actionPerformed(ActionEvent event) {
// TODO Auto-generated method stub
Object src=event.getSource();
if(src==Clear)
{
packetdes.setText("");
packetori.setText("");
}
else if(src==bstart)
{
fetchtrd=new Thread()
{
@Override
public void run() {
// TODO Auto-generated method stub
int index=nicselect.getSelectedIndex();
macaddrtext.setText(cap.getMac(index));
destext.setText(cap.getDescription(index));
infotext.setText(cap.devices[index].description);
cap.startfetch(index);
}
};
fetchtrd.start();
}
}
}
二、Capture类
package mycapture;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Formatter;
import java.util.Locale;
import jpcap.packet.Packet;
import jpcap.JpcapCaptor;
import jpcap.PacketReceiver;
public class capture {
long num=0;
public jpcap.NetworkInterface[] devices=null;
public Main main=null;
JpcapCaptor cap=null;
OutputStreamWriter osw=null;
public capture(Main main)
{
this.main=main;
try {
osw=new OutputStreamWriter(new FileOutputStream("D:/capturedata/data"+Math.round(Math.random()*255)+".txt"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
devices = JpcapCaptor.getDeviceList();
}
public String[] getNicName()
{
String[]temp=new String[devices.length];
for(int i=0;i<devices.length;i++)
{
temp[i]=devices[i].name;
}
return temp;
}
public String getMac(int index)
{
String temp= new String();
for(int i=0;i<devices[index].mac_address.length-1;i++)
temp+=String.format(Locale.CHINESE, "%02x-", devices[index].mac_address[i]);
temp+=String.format(Locale.CHINESE, "%02x", devices[index].mac_address[5]);
return temp;
}
public String getDescription(int index)
{
String temp=new String();
temp=devices[index].datalink_description;
return temp;
}
public void startfetch(int index)
{
try {
cap=JpcapCaptor.openDevice(devices[index], 65535, false,20);
cap.loopPacket(-1, new printer());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String byte2hex(byte []data,int len)
{
String temp=new String();
for(int i=0;i<len;i++)
{
temp+=String.format("%x", data[i]);
}
return temp.toUpperCase();
}
class printer implements PacketReceiver{
@Override
public void receivePacket(Packet arg0) {
// TODO Auto-generated method stub
String datap="Parsed data:"+num+":"+arg0.toString()+"\r\n";
String datai="Original data:"+num+":"+byte2hex(arg0.data,arg0.data.length)+"\r\n";
String header="Header:"+num+":"+byte2hex(arg0.header,arg0.header.length)+"\r\n";
main.packetdes.append(datap);
main.packetdes.append(header);
main.packetori.append(datai);
try {
osw.append(datap+datai+header+"\r\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
num++;
}
}
}
基于JPCAP的局域网嗅探器1.0
最新推荐文章于 2022-05-22 22:56:44 发布