⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipv4analyzer.java

📁 本程序用来实现对网络流量的获取及分析功能。可以分离出tcp/udp报文,http协议
💻 JAVA
字号:
package jdumper.analyzer;
import java.net.InetAddress;
import java.util.Hashtable;

import jdumper.JDCaptor;

import jpcap.packet.IPPacket;
import jpcap.packet.Packet;

public class IPv4Analyzer extends JDPacketAnalyzer
{
	private static final String[] valueNames={"Version",
		"TOS: Priority",
		"TOS: Throughput",
		"TOS: Reliability",
		"Length",
		"Identification",
		"Fragment: Don't Fragment",
		"Fragment: More Fragment",
		"Fragment Offset",
		"Time To Live",
		"Protocol",
		"Source IP",
		"Destination IP",
		"Source Host Name",
		"Destination Host Name"};
	private Hashtable values=new Hashtable();
	
	public IPv4Analyzer(){
		layer=NETWORK_LAYER;
	}
	
	public boolean isAnalyzable(Packet p){
		if(p instanceof IPPacket && ((IPPacket)p).version==4) return true;
		else return false;
	}
	
	public String getProtocolName(){
		return "IPv4";
	}
	
	public String[] getValueNames(){
		return valueNames;
	}
	
	public void analyze(Packet packet){
		values.clear();
		if(!isAnalyzable(packet))	return;
		final IPPacket ip=(IPPacket)packet;
		values.put(valueNames[0],new Integer(4));
		values.put(valueNames[1],new Integer(ip.priority));
		values.put(valueNames[2],new Boolean(ip.t_flag));
		values.put(valueNames[3],new Boolean(ip.r_flag));
		values.put(valueNames[4],new Integer(ip.length));
		values.put(valueNames[5],new Integer(ip.ident));
		values.put(valueNames[6],new Boolean(ip.dont_frag));
		values.put(valueNames[7],new Boolean(ip.more_frag));
		values.put(valueNames[8],new Integer(ip.offset));
		values.put(valueNames[9],new Integer(ip.hop_limit));
		values.put(valueNames[10],new Integer(ip.protocol));
		values.put(valueNames[11],ip.src_ip.getHostAddress());
		values.put(valueNames[12],ip.dst_ip.getHostAddress());
		values.put(valueNames[13],ip.src_ip);
		values.put(valueNames[14],ip.dst_ip);
	}
	
	public Object getValue(String valueName){
		if((valueNames[13].equals(valueName) && values.get(valueName) instanceof InetAddress) ||
		   (valueNames[14].equals(valueName) && values.get(valueName) instanceof InetAddress)){
			
			InetAddress addr=(InetAddress)values.get(valueName);
			if(JDCaptor.hostnameCache.containsKey(addr))
				values.put(valueName,JDCaptor.hostnameCache.get(addr));
			else{
				values.put(valueName,addr.getHostName());
				System.out.println("miss");
			}
		}

		return values.get(valueName);
	}
	
	Object getValueAt(int index){
		if(index<0 || index>=valueNames.length) return null;
		
		return getValue(valueNames[index]);
	}
	
	public Object[] getValues(){
		Object[] v=new Object[valueNames.length];
		
		for(int i=0;i<valueNames.length;i++)
			v[i]=getValueAt(i);
		
		return v;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -