Jpcapベースのネットワークキャプチャ+分析ソフトウェア

1591 ワード

これは私达のネットのプログラミングとプロトコルの分析の授业で、最近ずっとJAVAでプロジェクトを书いているため、后でもうすぐインタフェースに书いて、だからいっそ直接JAVAで今回の授业を书くことを学んで、一挙両得です.
授業では、ローカルエリアネットワーク内のすべてのパケットを取得し、TCP、UDP、ICMPの各フィールド、およびいくつかのアプリケーション層プロトコル(HTTP、DNSなど)を分析することが要求されています.
JAVAでバッグをつかむには、Jpcapというバッグを利用する必要があります.JAVAからwinpcapまでの中間インタフェースを実現しているので、実際にはwinpcapを呼び出すことでパッケージをつかむことができますが、winpcapは、ネットワークの下部にアクセスする能力を提供し、システムから独立したdllを提供するヤクザソフトウェアです.
winpcapは去年のコンピュータのネットの授業の時すでにインストールしたことがあって、ものはどこをなくしたことを知らないで、ここは64のためのJpcapのパケットにクリックしてリンクを開けて、
プロジェクトを作成してインポートすればいいのですが、インポートが完了したのか、エラーが発生することがあります.ここでjarを全部削除して再インポートすれば大丈夫です.具体的な原因は分かりません.
このコードでは、NICのリストを開き、NIC(this.num)を選択してスナップを開き、無限のスナップショットを実行できます(パラメータ-1は無限を表し、他の正数はパケットをどれだけ捕まえたかを表して停止します).
このコードをextends Threadのクラスに配置し、run関数を再ロードすることでマルチスレッドを実現できます.
public void run(){  
      NetworkInterface[] devices = JpcapCaptor.getDeviceList();
      try {
		jcap = JpcapCaptor.openDevice(devices[this.num], 65535, false, 20);
	} catch (IOException e) {
		e.printStackTrace();
	}  
      jcap.loopPacket(-1, new ClientPacketHandler());  
  }

ここで使用するClientPacketHandlerクラスは、PacketReceiverインタフェースを実装するクラスであり、関数は1つしかありません.
public void receivePacket(Packet packet)  {
}

この関数はloopPacketがパケットを捕まえた後の処理関数であり、packetは対応するパケットであり、ここでのPacketはJpcapの下のパケットのベースクラスであり、直接Objectから継承され、他の例えばTCPPacket、IPPacketはそれによって継承されている.
if(packet instanceof TCPPacket) //          TCP ,   
TCPPacket tp = (TCPPacket)packet //       TCP   
EthernetPacket EP = (EthernetPacket)packet.datalink; //           

順次類推する.