問題簡述:
利用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.感覺會漏判,不夠準確。
繼續尋找更好的解法,期待解答!