jpcap是第三方的开发包,主要是利用java对底层数据包进行捕获的,调用wipcap或者lipcap。官方网站提供了一个例子程序jpcapdumper,很好的一个程序,实现了网络数据包的捕获分析。
    对于里面的ui设计,我是初学,说实在话,看不懂。如果哪位高手有空,有兴趣给帮忙看下啊,万分感谢。想问的就是这个程序的ui设计用到了哪些技术,如果我不使用程序的树形目录功能,单纯的添加按钮,不考虑以后的扩展性,如模块的添加什么的,是不是可以变的简单。还有程序调试的时候开始的界面上面的表格只有NO LENGTH等信息,怎末样才能把这些信息换掉,换成基本的source ip,port等信息,程序中所有的包信息都是通过左下表格点选显示。这样比较简单,哪位高手有空的话帮忙看下。有的分不多,希望有热心的人给指导下。

解决方案 »

  1.   

     帖子发的仓促,附件忘发了。http://netresearch.ics.uci.edu/kfujii/jpcapdumper/JpcapDumper-src.zip这个就是例子程序的源程序,哪位有空有时间的帮忙看下哦。如果谁愿意帮忙改下程序的,麻烦留个联系方式,有这个需要把程序改下,现在学校要交个东西,这个东西研究了很久,能力不够,很多地方模糊。高手改这个很简单的,就是把繁杂的改的简单,酬劳联系再说吧。
      

  2.   

    /*
     * Created on Apr 4, 2003
     *
     * To change the template for this generated file go to
     * Window>Preferences>Java>Code Generation>Code and Comments
     */
    package jdumper;import java.io.File;
    import java.net.InetAddress;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Vector;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;import javax.swing.JFileChooser;
    import javax.swing.JOptionPane;import jdumper.stat.JDStatisticsTaker;
    import jdumper.ui.JDCaptureDialog;
    import jdumper.ui.JDContinuousStatFrame;
    import jdumper.ui.JDCumlativeStatFrame;
    import jdumper.ui.JDFrame;
    import jdumper.ui.JDStatFrame;import jpcap.JpcapCaptor;
    import jpcap.PacketReceiver;
    import jpcap.JpcapWriter;
    import jpcap.packet.IPPacket;
    import jpcap.packet.Packet;/**
     * @author kfujii
     *
     * To change the template for this generated type comment go to
     * Window>Preferences>Java>Code Generation>Code and Comments
     */
    public class JDCaptor {
    long MAX_PACKETS_HOLD=10000; List<Packet> packets = new ArrayList<Packet>(); JpcapCaptor jpcap=null; boolean isLiveCapture;
    boolean isSaved = false; JDFrame frame; public void setJDFrame(JDFrame frame){
    this.frame=frame;
    } public List<Packet> getPackets(){
    return packets;
    }
    public void capturePacketsFromDevice() {
    if(jpcap!=null)
    jpcap.close();
    jpcap = JDCaptureDialog.getJpcap(frame);
    clear();

    if (jpcap != null) {
    isLiveCapture = true;
    frame.disableCapture(); startCaptureThread();
    }
    } public void loadPacketsFromFile() {
    isLiveCapture = false;
    clear(); int ret = JpcapDumper.chooser.showOpenDialog(frame);
    if (ret == JFileChooser.APPROVE_OPTION) {
    String path = JpcapDumper.chooser.getSelectedFile().getPath(); try {
    if(jpcap!=null){
    jpcap.close();
    }
    jpcap = JpcapCaptor.openFile(path);
    } catch (java.io.IOException e) {
    JOptionPane.showMessageDialog(
    frame,
    "Can't open file: " + path);
    e.printStackTrace();
    return;
    } frame.disableCapture(); startCaptureThread();
    }
    } private void clear(){
    packets.clear();
    frame.clear(); for(int i=0;i<sframes.size();i++)
    ((JDStatFrame)sframes.get(i)).clear();
    } public void saveToFile() {
    if (packets == null)
    return; int ret = JpcapDumper.chooser.showSaveDialog(frame);
    if (ret == JFileChooser.APPROVE_OPTION) {
    File file = JpcapDumper.chooser.getSelectedFile(); if (file.exists()) {
    if (JOptionPane
    .showConfirmDialog(
    frame,
    "Overwrite " + file.getName() + "?",
    "Overwrite?",
    JOptionPane.YES_NO_OPTION)
    == JOptionPane.NO_OPTION) {
    return;
    }
    } try {
    //System.out.println("link:"+info.linktype);
    //System.out.println(lastJpcap);
    JpcapWriter writer = JpcapWriter.openDumpFile(jpcap,file.getPath()); for (Packet p:packets) {
    writer.writePacket(p);
    } writer.close();
    isSaved = true;
    //JOptionPane.showMessageDialog(frame,file+" was saved correctly.");
    } catch (java.io.IOException e) {
    e.printStackTrace();
    JOptionPane.showMessageDialog(
    frame,
    "Can't save file: " + file.getPath());
    }
    }
    } public void stopCapture() {
    stopCaptureThread();
    } public void saveIfNot() {
    if (isLiveCapture && !isSaved) {
    int ret =
    JOptionPane.showConfirmDialog(
    null,
    "Save this data?",
    "Save this data?",
    JOptionPane.YES_NO_OPTION);
    if (ret == JOptionPane.YES_OPTION)
    saveToFile();
    }
    } List<JDStatFrame> sframes=new ArrayList<JDStatFrame>();
    public void addCumulativeStatFrame(JDStatisticsTaker taker) {
    sframes.add(JDCumlativeStatFrame.openWindow(packets,taker.newInstance()));
    } public void addContinuousStatFrame(JDStatisticsTaker taker) {
    sframes.add(JDContinuousStatFrame.openWindow(packets,taker.newInstance()));
    } public void closeAllWindows(){
    for(int i=0;i<sframes.size();i++)
    ((JDStatFrame)sframes.get(i)).dispose();
    } private Thread captureThread; private void startCaptureThread() {
    if (captureThread != null)
    return; captureThread = new Thread(new Runnable(){
    //body of capture thread
    public void run() {
    while (captureThread != null) {
    if (jpcap.processPacket(1, handler) == 0 && !isLiveCapture)
    stopCaptureThread();
    Thread.yield();
    } jpcap.breakLoop();
    //jpcap = null;
    frame.enableCapture();
    }
    });
    captureThread.setPriority(Thread.MIN_PRIORITY);

    frame.startUpdating();
    for(int i=0;i<sframes.size();i++){
    ((JDStatFrame)sframes.get(i)).startUpdating();
    }

    captureThread.start();
    } void stopCaptureThread() {
    captureThread = null;
    frame.stopUpdating();
    for(int i=0;i<sframes.size();i++){
    ((JDStatFrame)sframes.get(i)).stopUpdating();
    }
    } private ExecutorService exe=Executors.newFixedThreadPool(10);
    public static final Map<InetAddress,String> hostnameCache=new HashMap<InetAddress, String>();

    private PacketReceiver handler=new PacketReceiver(){
    public void receivePacket(final Packet packet) {
    packets.add(packet);
    while (packets.size() > MAX_PACKETS_HOLD) {
    packets.remove(0);
    }
    if (!sframes.isEmpty()) {
    for (int i = 0; i < sframes.size(); i++)
    ((JDStatFrame)sframes.get(i)).addPacket(packet);
    }
    isSaved = false;

    if(packet instanceof IPPacket){
    exe.execute(new Runnable(){
    public void run() {
    IPPacket ip=(IPPacket)packet;
    if(!hostnameCache.containsKey(ip.src_ip))
    hostnameCache.put(ip.src_ip,ip.src_ip.getHostName());
    if(!hostnameCache.containsKey(ip.dst_ip))
    hostnameCache.put(ip.dst_ip,ip.dst_ip.getHostName());
    System.out.println(hostnameCache.size());
    }
    });
    }
    }
    };}