jpcap
クラス Jpcap

java.lang.Object
  |
  +--jpcap.Jpcap

public class Jpcap
extends java.lang.Object

Java/Pcap基本クラス

パケットのキャプチャリングはこのクラスのインスタンスを通して行う。

使用方法:

環境変数CLASSPATHに/usr/local/java/jre/lib/jpcap.jarを追加する。
(例:setenv CLASSPATH .:/usr/local/java/jre/lib/jpcap.jar)

簡単なパケットキャプチャプログラム(tcpdumpライク)

 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());
   }
 }
 


内部クラスの概要
 class Jpcap.JpcapInfo
          キャプチャ情報を保持する為のクラス。
 
フィールドの概要
 int dropped_packets
          受信できなかったパケット数
 int received_packets
          受信したパケット数
 
コンストラクタの概要
Jpcap(java.lang.String filename)
          tcpdumpでダンプしたファイルを開きJpcapのインスタンスを作成する
Jpcap(java.lang.String device, int snaplen, boolean promisc, int to_ms)
          ライブキャプチャリング用にネットワークインターフェースを初期化しJpcapのインスタンスを作成する
 
メソッドの概要
 void close()
          オープンしているインターフェースまたはダンプファイルを閉じる
static java.lang.String[] getDeviceDescription()
          getDeviceList()で所得したデバイスの説明を返す(MS Windowsのみ) Windowsではデバイス名を難解な番号と文字列として扱われています。
static java.lang.String[] getDeviceList()
          キャプチャ可能なデバイスのリストを返す
 java.lang.String getErrorMessage()
          エラーメッセージを返す
 Jpcap.JpcapInfo getJpcapInfo()
          このJpcapインスタンスのJpcap.JpcapInfoを返す
 Packet getPacket()
          パケットを1つ所得する
static java.lang.String lookupDevice()
          キャプチャ可能なデバイスを発見する
 int loopPacket(int count, JpcapHandler handler)
          パケットを連続して所得する 指定した数のパケットを所得します。
 void openRawSocket()
          IPパケット送信用のソケットを初期化する
 int processPacket(int count, JpcapHandler handler)
          パケットを連続して所得する 指定した数のパケットを所得します。
 void sendPacket(IPPacket packet)
          IPパケットを1つ送信する。
 void setFilter(java.lang.String condition, boolean optimize)
          フィルタを設定する
 void updateStat()
          received_packets と dropped_packetsを更新する
 
クラス java.lang.Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

received_packets

public int received_packets
受信したパケット数
関連項目:
updateStat()

dropped_packets

public int dropped_packets
受信できなかったパケット数
関連項目:
updateStat()
コンストラクタの詳細

Jpcap

public Jpcap(java.lang.String device,
             int snaplen,
             boolean promisc,
             int to_ms)
      throws java.io.IOException
ライブキャプチャリング用にネットワークインターフェースを初期化しJpcapのインスタンスを作成する
パラメータ:
device - キャプチャするネットワークデバイス名 (例:hme0,eth0)
snaplen - 1度にキャプチャする最大バイト数
promisc - 指定したインターフェースをプロミシャスモードにする
to_ms - processPacket()を中断するまでのタイムアウト時間
例外:
java.io.IOException - キャプチャデバイスを開けなった場合

Jpcap

public Jpcap(java.lang.String filename)
      throws java.io.IOException
tcpdumpでダンプしたファイルを開きJpcapのインスタンスを作成する
パラメータ:
filename - ダンプファイルのファイル名
例外:
java.io.IOException - ファイルが開けなかった場合
メソッドの詳細

lookupDevice

public static java.lang.String lookupDevice()
キャプチャ可能なデバイスを発見する
戻り値:
発見したデバイス名

getDeviceList

public static java.lang.String[] getDeviceList()
キャプチャ可能なデバイスのリストを返す
戻り値:
発見したデバイスのリスト

getDeviceDescription

public static java.lang.String[] getDeviceDescription()
getDeviceList()で所得したデバイスの説明を返す(MS Windowsのみ)

Windowsではデバイス名を難解な番号と文字列として扱われています。 (例:\Device\Packet_{6E05D...})このメソッドは、各デバイスに 対するよりわかりやすい説明(例:3com EtherLinkII)を返します。

戻り値:
各デバイスの説明

getPacket

public Packet getPacket()
パケットを1つ所得する

processPacket

public int processPacket(int count,
                         JpcapHandler handler)
パケットを連続して所得する

指定した数のパケットを所得します。指定数パケットを所得し終わるか タイムアウトになると終了します。実際に所得したパケット数を 返します。

パラメータ:
count - 所得するパケット数
-1の場合はエラーが発生するかEOFまで所得し続ける
handler - 所得したパケットを解析するためのJpcapHandlerクラス
戻り値:
キャプチャしたパケット数

loopPacket

public int loopPacket(int count,
                      JpcapHandler handler)
パケットを連続して所得する

指定した数のパケットを所得します。processPacket()とは異なり、 タイムアウトを無視して指定したパケット数を所得するまで キャプチャを続けます。タイムアウトを利用したい時は processPacketを使用して下さい。

パラメータ:
count - 所得するパケット数
-1の場合はエラーが発生するかEOFまで所得し続ける
handler - 所得したパケットを解析するためのJpcapHandlerクラス
戻り値:
キャプチャしたパケット数

setFilter

public void setFilter(java.lang.String condition,
                      boolean optimize)
フィルタを設定する
パラメータ:
condition - フィルタにセットする文字列
optimize - trueの場合は最適化を行う

updateStat

public void updateStat()
received_packets と dropped_packetsを更新する

openRawSocket

public void openRawSocket()
IPパケット送信用のソケットを初期化する

sendPacket

public void sendPacket(IPPacket packet)
IPパケットを1つ送信する。

現在はTCP/UDP/ICMP over IPv4のみサポートしています。
ICMPはエコーパケットのみ送信します。

パラメータ:
packet - 送信するIPパケット

getErrorMessage

public java.lang.String getErrorMessage()
エラーメッセージを返す

close

public void close()
オープンしているインターフェースまたはダンプファイルを閉じる

getJpcapInfo

public Jpcap.JpcapInfo getJpcapInfo()
このJpcapインスタンスのJpcap.JpcapInfoを返す