急!一个jpcap抓包获取http包中url的小程序出现问题,求大神帮忙
先贴上源码:
package test2;
import java.io.File;
import 
java.io.FileNotFoundException;
import 
java.io.IOException;
import java.io.RandomAccessFile;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.packet.Packet;
import jpcap.packet.TCPPacket;
public class HTTPPacketTest {
public static void main(String[] args) throws 
IOException {
/*-------------第一步绑定网络设备--------------------*/
NetworkInterface[] devices=JpcapCaptor.getDeviceList();  //返回一个网络设备列表
for(NetworkInterface n : devices)
System.out.println(n.name + "    |      " + n.description );
System.out.println("------------------------------------");
JpcapCaptor jpcap=null;
int caplen = 1512;
boolean promiscCheck = true;
//caplen限制每一次收到一个数据包,只提取该数据包中前多少字节
//Promisc:设置是否混杂模式。处于混杂模式将接收所有数据包,若之后又调用了包过滤函数setFilter()将不起任何作用
//50这个参数主要用于processPacket()方法,指定超时的时间
try {
jpcap=JpcapCaptor.openDevice(devices[0],caplen,promiscCheck,50);
} catch (IOException e) {
e.printStackTrace();
}
/*----------------第二步抓包---------------*/
int i = 0;
String s = null;
String result = null;
while(i < 100)
{
Packet packet = jpcap.getPacket();
if(packet instanceof TCPPacket )
{
	TCPPacket tcpPacket = (TCPPacket)packet;
	if(tcpPacket.src_port==80||tcpPacket.dst_port==80) //定义为80号端口,确定为HTTP数据包
	{
		i++;
		System.out.print("数据:\n");  
		for (i = 0; i < tcpPacket.data.length; i++) {
			System.out.print((char)tcpPacket.data[i]);
		}
		try
		{
			File file = new File("D:\\about.txt");
			if(!file.exists()){
			file.createNewFile();
		}
		//byte[] b=result.getBytes();
   	 	//FileOutputStream fout=new FileOutputStream(myFile);
   	 	RandomAccessFile raf=new RandomAccessFile(file,"rw");  //保存在记事本文件中
   	 	raf.seek(raf.length());
		if(raf.read()!=-1) {
   	 	raf.writeByte(tcpPacket.data[i]);
   	 	}	  	 	
		while(raf.read()!=-1){
			s = raf.readLine();
			System.out.println(s);
			//正则式匹配,抓取文件中的url
			Pattern p = Pattern.compile("Referer:(.*?)(html)");
			Matcher m = p.matcher(s);
			if (m.find()) {
				result = m.group(1)+m.group(2);
			}
			System.out.println("结果集输出:"+result);
   	 	/*Pattern p = Pattern.compile("Referer:(.*?)Accept-Encoding:");
   	 	Matcher m = p.matcher(string);
   	 	if (m.find()) {
   	 		System.out.println("正则输出:"+m.group(1));
   	 	}*/
   	 	raf.close();	
   	 	}
		}
   	 catch(
FileNotFoundException e)
	  {	  	
System.err.println(e);
	  }
	  catch(IOException e)
	  {
	  	System.err.println(e);
	  }  //异常情况的处理
}
}
}
}
}
运行一下可以发现,正则表达式根本就没有配比输出,查了一下,应该是编码问题,请教做过的前辈们帮个忙,帮忙给条出路啊!!!
------解决方案--------------------
你现在问题没有准确获取到数据包的编码,数据解析为乱码。要获取到数据包的自然码,不然无法知道数据的编码。