急!一个jpcap抓包获取http包中url的小程序出现问题,求大神帮忙

damoguyan258 2012-07-16 09:30:04
先贴上源码:
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);
} //异常情况的处理
}
}
}
}
}

运行一下可以发现,正则表达式根本就没有配比输出,查了一下,应该是编码问题,请教做过的前辈们帮个忙,帮忙给条出路啊!!!
...全文
769 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jin____ 2014-04-21
  • 打赏
  • 举报
回复
楼主,解决了吗?如果解决了,让大家学习学习,谢谢!
happyveve 2013-11-18
  • 打赏
  • 举报
回复
同问,楼主这个问题解决了吗?
小敏纸 2013-04-18
  • 打赏
  • 举报
回复
这个问题处理了吗?我也想要获取URL
damoguyan258 2012-07-16
  • 打赏
  • 举报
回复
不停刷啊,求解啊,求大神帮忙啊~~~
damoguyan258 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你现在问题没有准确获取到数据包的编码,数据解析为乱码。要获取到数据包的自然码,不然无法知道数据的编码。
[/Quote]

如何准确的获取数据包编码,并且解析?大哥能指导一下么,这儿纠结了很久了。。。谢谢了
Arjick 2012-07-16
  • 打赏
  • 举报
回复
你现在问题没有准确获取到数据包的编码,数据解析为乱码。要获取到数据包的自然码,不然无法知道数据的编码。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧