基于JPCAP的局域网嗅探器1.0

七、
一、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++;
			
		}
		
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值