问题简述:
利用java的第三方库jpcap写抓包程序,求解怎么识别出http和https的数据包(就只要能判断出是http协议或https协议即可)。
测试的解法:
1.在tcp包(jpcap自带TCPPacket类比较方便识别tcp包)的基础上用80端口和443端口区分http和https,但是连tcp都识别成http或https了(不成功)。
2.设法找出http或https特有而tcp没有的字段,未能找出。
代码示意(未完成):
` else if(packet instanceof jpcap.packet.ICMPPacket) {
packetprocol = "ICMP"; r.addElement(packetprocol); } else if(packet instanceof jpcap.packet.TCPPacket) { TCPPacket tcppacket = (TCPPacket)packet; //if((tcppacket.src_port==80||tcppacket.dst_port==80)&&tcppacket.) { packetprocol = "HTTP"; r.addElement(packetprocol); }else if(tcppacket.src_port==443||tcppacket.dst_port==443) { packetprocol = "HTTPS"; r.addElement(packetprocol); } else { packetprocol = "TCP"; r.addElement(packetprocol); }`
暂时的解决方法:
在抓到的tcp数据包的data字段里判断是否包含"HTTP"字符串。
不足:
1.与wireshark对比后发现,wireshark有的tcp包中data字段有HTTP也识别为tcp而非http(不知道wireshark是怎么解析的)。
2.感觉会漏判,不够准确。
继续寻找更好的解法,期待解答!