📄 jpcap.java
字号:
package jpcap;/*** Java/Pcap婎杮僋儔僗<P>* 僷働僢僩偺僉儍僾僠儍儕儞僌偼偙偺僋儔僗偺僀儞僗僞儞僗傪捠偟偰峴偆丅<P>** 巊梡曽朄丗<P>* 娐嫬曄悢CLASSPATH偵/usr/local/java/jre/lib/jpcap.jar傪捛壛偡傞丅<BR>* 乮椺丗setenv CLASSPATH .:/usr/local/java/jre/lib/jpcap.jar乯<P>** 娙扨側僷働僢僩僉儍僾僠儍僾儘僌儔儉乮tcpdump儔僀僋乯<BR>* <PRE>* import jpcap.*;* * class Tcpdump implements JpcapHandler* {* public void handlePacket(Packet packet){* System.out.println(packet);* }* * public static void main(String[] args) throws java.io.IOException{* Jpcap jpcap=new Jpcap(args[0],1000,true,20);* jpcap.processPacket(-1,new Tcpdump());* }* }* </PRE>*/public class Jpcap{ /** * 庴怣偟偨僷働僢僩悢 * * @see #updateStat() */ public int received_packets; /** * 庴怣偱偒側偐偭偨僷働僢僩悢 * * @see #updateStat() */ public int dropped_packets; private native String nativeOpenLive(String device,int snaplen, int promisc,int to_ms); private native String nativeOpenOffline(String filename); /** * 僉儍僾僠儍壜擻側僨僶僀僗傪敪尒偡傞 * * @return 敪尒偟偨僨僶僀僗柤 **/ public static native String lookupDevice(); /** * 僉儍僾僠儍壜擻側僨僶僀僗偺儕僗僩傪曉偡 * * @return 敪尒偟偨僨僶僀僗偺儕僗僩 **/ public static native String[] getDeviceList(); /** * getDeviceList()偱強摼偟偨僨僶僀僗偺愢柧傪曉偡(MS Windows偺傒)<P> * * Windows偱偼僨僶僀僗柤傪擄夝側斣崋偲暥帤楍偲偟偰埖傢傟偰偄傑偡丅 * (椺丗\Device\Packet_{6E05D...}乯偙偺儊僜僢僪偼丄奺僨僶僀僗偵 * 懳偡傞傛傝傢偐傝傗偡偄愢柧乮椺丗3com EtherLinkII)傪曉偟傑偡丅 * * @return 奺僨僶僀僗偺愢柧 **/ public static native String[] getDeviceDescription(); /** * 僷働僢僩傪侾偮強摼偡傞 */ public native Packet getPacket(); /** * 僷働僢僩傪楢懕偟偰強摼偡傞<P> * * 巜掕偟偨悢偺僷働僢僩傪強摼偟傑偡丅巜掕悢僷働僢僩傪強摼偟廔傢傞偐 * 僞僀儉傾僂僩偵側傞偲廔椆偟傑偡丅幚嵺偵強摼偟偨僷働僢僩悢傪 * 曉偟傑偡丅 * * @param count 強摼偡傞僷働僢僩悢<BR> * -1偺応崌偼僄儔乕偑敪惗偡傞偐EOF傑偱強摼偟懕偗傞 * @param handler 強摼偟偨僷働僢僩傪夝愅偡傞偨傔偺JpcapHandler僋儔僗 * @return 僉儍僾僠儍偟偨僷働僢僩悢 */ public native int processPacket(int count,JpcapHandler handler); /** * 僷働僢僩傪楢懕偟偰強摼偡傞<P> * * 巜掕偟偨悢偺僷働僢僩傪強摼偟傑偡丅processPacket()偲偼堎側傝丄 * 僞僀儉傾僂僩傪柍帇偟偰巜掕偟偨僷働僢僩悢傪強摼偡傞傑偱 * 僉儍僾僠儍傪懕偗傑偡丅僞僀儉傾僂僩傪棙梡偟偨偄帪偼 * processPacket傪巊梡偟偰壓偝偄丅 * * @param count 強摼偡傞僷働僢僩悢<BR> * -1偺応崌偼僄儔乕偑敪惗偡傞偐EOF傑偱強摼偟懕偗傞 * @param handler 強摼偟偨僷働僢僩傪夝愅偡傞偨傔偺JpcapHandler僋儔僗 * @return 僉儍僾僠儍偟偨僷働僢僩悢 */ public native int loopPacket(int count,JpcapHandler handler); /** * 僼傿儖僞傪愝掕偡傞 * * @param condition 僼傿儖僞偵僙僢僩偡傞暥帤楍 * @param optimize true偺応崌偼嵟揔壔傪峴偆 */ public native void setFilter(String condition,boolean optimize); /** * {@link #received_packets received_packets} 偲 {@link #dropped_packets dropped_packets}傪峏怴偡傞 */ public native void updateStat(); /** * IP僷働僢僩憲怣梡偺僜働僢僩傪弶婜壔偡傞 * */ public native void openRawSocket(); /** * IP僷働僢僩傪侾偮憲怣偡傞丅<P> * 尰嵼偼TCP/UDP/ICMP over IPv4偺傒僒億乕僩偟偰偄傑偡丅<BR> * ICMP偼僄僐乕僷働僢僩偺傒憲怣偟傑偡丅 * * @param packet 憲怣偡傞IP僷働僢僩 */ public native void sendPacket(IPPacket packet); /** * 僄儔乕儊僢僙乕僕傪曉偡 **/ public native String getErrorMessage(); /** * 僆乕僾儞偟偰偄傞僀儞僞乕僼僃乕僗傑偨偼僟儞僾僼傽僀儖傪暵偠傞 */ public native void close(); /** * 儔僀僽僉儍僾僠儍儕儞僌梡偵僱僢僩儚乕僋僀儞僞乕僼僃乕僗傪弶婜壔偟Jpcap偺僀儞僗僞儞僗傪嶌惉偡傞 * * @param device 僉儍僾僠儍偡傞僱僢僩儚乕僋僨僶僀僗柤 (椺丗hme0,eth0) * @param snaplen 侾搙偵僉儍僾僠儍偡傞嵟戝僶僀僩悢 * @param promisc 巜掕偟偨僀儞僞乕僼僃乕僗傪僾儘儈僔儍僗儌乕僪偵偡傞 * @param to_ms {@link #processPacket(int,JpcapHandler) processPacket()}傪拞抐偡傞傑偱偺僞僀儉傾僂僩帪娫 * @exception java.io.IOException 僉儍僾僠儍僨僶僀僗傪奐偗側偭偨応崌 */ public Jpcap(String device,int snaplen,boolean promisc,int to_ms) throws java.io.IOException{ String ret=nativeOpenLive(device,snaplen,(promisc?1:0),to_ms); if(ret!=null){ //error throw new java.io.IOException(ret); } } /** * tcpdump偱僟儞僾偟偨僼傽僀儖傪奐偒Jpcap偺僀儞僗僞儞僗傪嶌惉偡傞 * * @param filename 僟儞僾僼傽僀儖偺僼傽僀儖柤 * @exception java.io.IOException 僼傽僀儖偑奐偗側偐偭偨応崌 * */ public Jpcap(String filename) throws java.io.IOException{ String ret=nativeOpenOffline(filename); if(ret!=null){ //error throw new java.io.IOException(ret); } } /** * 僉儍僾僠儍忣曬傪曐帩偡傞堊偺僋儔僗丅JpcapWriter傪巊梡偡傞嵺偵昁梫丅 **/ public class JpcapInfo{ int linktype,thiszone,snaplen; JpcapInfo(int linktype,int thiszone,int snaplen){ this.linktype=linktype;this.thiszone=thiszone;this.snaplen=snaplen; } } private JpcapInfo info; void setInfo(int linktype,int thiszone,int snaplen){ info=new JpcapInfo(linktype,thiszone,snaplen); } /** * 偙偺Jpcap僀儞僗僞儞僗偺Jpcap.JpcapInfo傪曉偡 **/ public JpcapInfo getJpcapInfo(){ return info; } static{ System.loadLibrary("jpcap"); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -