Sniffer.java
上传用户:huaqiao
上传日期:2022-08-06
资源大小:1k
文件大小:2k
源码类别:

Java编程

开发平台:

Java

  1. // $Id: Sniffer.java,v 1.1 2002/02/18 21:49:49 pcharles Exp $
  2. /***************************************************************************
  3.  * Copyright (C) 2001, Rex Tsai <chihchun@kalug.linux.org.tw>              *
  4.  * Distributed under the Mozilla Public License                            *
  5.  *   http://www.mozilla.org/NPL/MPL-1.1.txt                                *
  6.  ***************************************************************************/
  7. package net.sourceforge.jpcap.tutorial.sniffer;
  8. import net.sourceforge.jpcap.capture.*;
  9. import net.sourceforge.jpcap.net.*;
  10. /**
  11.  * jpcap Tutorial - Sniffer example
  12.  *
  13.  * @author Rex Tsai
  14.  * @version $Revision: 1.1 $
  15.  * @lastModifiedBy $Author: pcharles $
  16.  * @lastModifiedAt $Date: 2002/02/18 21:49:49 $
  17.  */
  18. public class Sniffer
  19. {
  20.   private static final int INFINITE = -1;
  21.   private static final int PACKET_COUNT = INFINITE; 
  22.   /*
  23.     private static final String HOST = "203.239.110.20";
  24.     private static final String FILTER = 
  25.       "host " + HOST + " and proto TCP and port 23";
  26.   */
  27.   private static final String FILTER = 
  28.     // "port 23";
  29.     "";
  30.   public static void main(String[] args) {
  31.     try {
  32.       if(args.length == 1){
  33. Sniffer sniffer = new Sniffer(args[0]);
  34.       } else {
  35. System.out.println("Usage: java Sniffer [device name]");
  36. System.out.println("Available network devices on your machine:");
  37. String[] devs = PacketCapture.lookupDevices();
  38. for(int i = 0; i < devs.length ; i++)
  39.   System.out.println("t" + devs[i]);
  40.       }
  41.     } catch(Exception e) {
  42.       e.printStackTrace();
  43.     }
  44.   }
  45.   public Sniffer(String device) throws Exception {
  46.     // Initialize jpcap
  47.     PacketCapture pcap = new PacketCapture();
  48.     System.out.println("Using device '" + device + "'");
  49.     pcap.open(device, true);
  50.     pcap.setFilter(FILTER, true);
  51.     pcap.addPacketListener(new PacketHandler());
  52.     System.out.println("Capturing packets...");
  53.     pcap.capture(PACKET_COUNT);
  54.   }
  55. }
  56. class PacketHandler implements PacketListener 
  57. {
  58.   public void packetArrived(Packet packet) {
  59.     try {
  60.       // only handle TCP packets
  61.       if(packet instanceof TCPPacket) {
  62. TCPPacket tcpPacket = (TCPPacket)packet;
  63. byte[] data = tcpPacket.getTCPData();
  64.     
  65. String srcHost = tcpPacket.getSourceAddress();
  66. String dstHost = tcpPacket.getDestinationAddress();
  67. String isoData = new String(data, "ISO-8859-1");
  68. System.out.println(srcHost+" -> " + dstHost + ": " + isoData);
  69.       }
  70.     } catch( Exception e ) {
  71.       e.printStackTrace();
  72.     }
  73.   }
  74. }