|
From: Peter P. <pr...@us...> - 2006-11-22 18:51:03
|
Update of /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/sample In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13312/lib/jpcap-0.5.1-lib/sample Added Files: Tcpdump.java SendICMP.java ARP.java SendTCP.java SendUDP.java Traceroute.java Log Message: Added remaining Jpcap files (java sources + docs) --- NEW FILE: Traceroute.java --- import java.net.Inet4Address; import java.net.InetAddress; import java.net.URL; import java.util.Arrays; import jpcap.JpcapCaptor; import jpcap.JpcapSender; import jpcap.NetworkInterface; import jpcap.NetworkInterfaceAddress; import jpcap.packet.EthernetPacket; import jpcap.packet.ICMPPacket; import jpcap.packet.IPPacket; import jpcap.packet.Packet; public class Traceroute { public static void main(String[] args) throws Exception{ if(args.length<2){ System.out.println("Usage: java Traceroute <device index (e.g., 0, 1..)> <target host address>"); System.exit(0); } //initialize Jpcap NetworkInterface device=JpcapCaptor.getDeviceList()[Integer.parseInt(args[0])]; JpcapCaptor captor=JpcapCaptor.openDevice(device,2000,false,5000); InetAddress thisIP=null; for(NetworkInterfaceAddress addr:device.addresses) if(addr.address instanceof Inet4Address){ thisIP=addr.address; break; } //obtain MAC address of the default gateway InetAddress pingAddr=InetAddress.getByName("www.microsoft.com"); captor.setFilter("tcp and dst host "+pingAddr.getHostAddress(),true); byte[] gwmac=null; while(true){ new URL("http://www.microsoft.com").openStream().close(); Packet ping=captor.getPacket(); if(ping==null){ System.out.println("cannot obtain MAC address of default gateway."); System.exit(-1); }else if(Arrays.equals(((EthernetPacket)ping.datalink).dst_mac,device.mac_address)) continue; gwmac=((EthernetPacket)ping.datalink).dst_mac; break; } //create ICMP packet ICMPPacket icmp=new ICMPPacket(); icmp.type=ICMPPacket.ICMP_ECHO; icmp.seq=100; icmp.id=0; icmp.setIPv4Parameter(0,false,false,false,0,false,false,false,0,0,0,IPPacket.IPPROTO_ICMP, thisIP,InetAddress.getByName(args[1])); icmp.data="data".getBytes(); EthernetPacket ether=new EthernetPacket(); ether.frametype=EthernetPacket.ETHERTYPE_IP; ether.src_mac=device.mac_address; ether.dst_mac=gwmac; icmp.datalink=ether; captor.setFilter("icmp and dst host "+thisIP.getHostAddress(),true); JpcapSender sender=captor.getJpcapSenderInstance(); //JpcapSender sender=JpcapSender.openDevice(device); sender.sendPacket(icmp); while(true){ ICMPPacket p=(ICMPPacket) captor.getPacket(); //System.out.println("received "+p); if(p==null){ System.out.println("Timeout"); }else if(p.type==ICMPPacket.ICMP_TIMXCEED){ p.src_ip.getHostName(); System.out.println(icmp.hop_limit+": "+p.src_ip); icmp.hop_limit++; }else if(p.type==ICMPPacket.ICMP_UNREACH){ p.src_ip.getHostName(); System.out.println(icmp.hop_limit+": "+p.src_ip); System.exit(0); }else if(p.type==ICMPPacket.ICMP_ECHOREPLY){ p.src_ip.getHostName(); System.out.println(icmp.hop_limit+": "+p.src_ip); System.exit(0); }else continue; sender.sendPacket(icmp); } } } --- NEW FILE: SendICMP.java --- import java.net.InetAddress; import jpcap.*; import jpcap.packet.EthernetPacket; import jpcap.packet.ICMPPacket; import jpcap.packet.IPPacket; class SendICMP { public static void main(String[] args) throws java.io.IOException{ NetworkInterface[] devices = JpcapCaptor.getDeviceList(); if(args.length<1){ System.out.println("Usage: java SentICMP <device index (e.g., 0, 1..)>"); for(int i=0;i<devices.length;i++) System.out.println(i+":"+devices[i].name+"("+devices[i].description+")"); System.exit(0); } int index=Integer.parseInt(args[0]); JpcapSender sender=JpcapSender.openDevice(devices[index]); ICMPPacket p=new ICMPPacket(); p.type=ICMPPacket.ICMP_TSTAMP; p.seq=1000; p.id=999; p.orig_timestamp=123; p.trans_timestamp=456; p.recv_timestamp=789; p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_ICMP, InetAddress.getByName("www.yahoo.com"),InetAddress.getByName("www.amazon.com")); p.data="data".getBytes(); EthernetPacket ether=new EthernetPacket(); ether.frametype=EthernetPacket.ETHERTYPE_IP; ether.src_mac=new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5}; ether.dst_mac=new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10}; p.datalink=ether; //for(int i=0;i<10;i++) sender.sendPacket(p); } } --- NEW FILE: ARP.java --- (This appears to be a binary file; contents omitted.) --- NEW FILE: Tcpdump.java --- import jpcap.*; import jpcap.packet.Packet; class Tcpdump implements PacketReceiver { public void receivePacket(Packet packet) { System.out.println(packet); } public static void main(String[] args) throws Exception { NetworkInterface[] devices = JpcapCaptor.getDeviceList(); if(args.length<1){ System.out.println("usage: java Tcpdump <select a number from the following>"); for (int i = 0; i < devices.length; i++) { System.out.println(i+" :"+devices[i].name + "(" + devices[i].description+")"); System.out.println(" data link:"+devices[i].datalink_name + "(" + devices[i].datalink_description+")"); System.out.print(" MAC address:"); for (byte b : devices[i].mac_address) System.out.print(Integer.toHexString(b&0xff) + ":"); System.out.println(); for (NetworkInterfaceAddress a : devices[i].addresses) System.out.println(" address:"+a.address + " " + a.subnet + " " + a.broadcast); } }else{ JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[Integer.parseInt(args[0])], 2000, false, 20); jpcap.loopPacket(-1, new Tcpdump()); } } } --- NEW FILE: SendUDP.java --- import java.net.InetAddress; import jpcap.*; import jpcap.packet.EthernetPacket; import jpcap.packet.IPPacket; import jpcap.packet.UDPPacket; class SendUDP { public static void main(String[] args) throws java.io.IOException{ NetworkInterface[] devices = JpcapCaptor.getDeviceList(); if(args.length<1){ System.out.println("Usage: java SentUDP <device index (e.g., 0, 1..)>"); for(int i=0;i<devices.length;i++) System.out.println(i+":"+devices[i].name+"("+devices[i].description+")"); System.exit(0); } int index=Integer.parseInt(args[0]); JpcapSender sender=JpcapSender.openDevice(devices[index]); UDPPacket p=new UDPPacket(12345,54321); p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_UDP, InetAddress.getByName("www.yahoo.com"),InetAddress.getByName("www.google.com")); p.data="data".getBytes(); EthernetPacket ether=new EthernetPacket(); ether.frametype=EthernetPacket.ETHERTYPE_IP; ether.src_mac=new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5}; ether.dst_mac=new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10}; p.datalink=ether; for(int i=0;i<10;i++) sender.sendPacket(p); } } --- NEW FILE: SendTCP.java --- import java.net.InetAddress; import jpcap.*; import jpcap.packet.EthernetPacket; import jpcap.packet.IPPacket; import jpcap.packet.TCPPacket; class SendTCP { public static void main(String[] args) throws java.io.IOException{ NetworkInterface[] devices = JpcapCaptor.getDeviceList(); if(args.length<1){ System.out.println("Usage: java SentTCP <device index (e.g., 0, 1..)>"); for(int i=0;i<devices.length;i++) System.out.println(i+":"+devices[i].name+"("+devices[i].description+")"); System.exit(0); } int index=Integer.parseInt(args[0]); JpcapSender sender=JpcapSender.openDevice(devices[index]); TCPPacket p=new TCPPacket(12,34,56,78,false,false,false,false,true,true,true,true,10,10); p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_TCP, InetAddress.getByName("www.microsoft.com"),InetAddress.getByName("www.google.com")); p.data="data".getBytes(); EthernetPacket ether=new EthernetPacket(); ether.frametype=EthernetPacket.ETHERTYPE_IP; ether.src_mac=new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5}; ether.dst_mac=new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10}; p.datalink=ether; for(int i=0;i<10;i++) sender.sendPacket(p); } } |