我正在尝试将由 scapy 形成的网络数据包转发到其余服务,但不知何故数据包在接收方(其余服务方)损坏。
我使用 scapy 形成了网络数据包:
0000 1a 0b 0c 14 05 16 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 01 10 00 01 00 00 40 11 f0 d2 05 05 05 04 7f 00 ......@.........
0020 00 01 00 44 00 43 00 fc 85 7f 01 00 00 00 00 00 ...D.C..........
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0110 00 00 00 00 00 00 63 82 53 63 35 01 01 ff ......c.Sc5...
我使用 python 代码将捕获的 scapy 数据包转发到 Web 服务:
h = httplib2.Http(".cache")
h.add_credentials("user","passworkd")
data = urllib.urlencode({"packet":pack})
resp, content = h.request(url, "POST", data, headers={'Content-Type': 'applicatoin/x-www-form-urlencodede'})
在服务器端(用 java 实现)我打印了获得的数据包(字节流),它显示以下输出(与发送数据包不同):
1a0b0c140516000000000000080045000110000100004011efbfbdefbfbd050505047f0000010044004300efbfbd7f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063efbfbd5363350101efbfbd
编辑:
Java服务器端处理:
@Path("/test")
@POST
@StatusCodes({
@ResponseCode(code = 200, condition = "Destination reachable"),
@ResponseCode(code = 503, condition = "Internal error"),
@ResponseCode(code = 503, condition = "Destination unreachable") })
public Response rcvDHCPPkt(@FormParam("packet") String packet) {
String pkt_decode = URLDecoder.decode(packet, "UTF-8"); // tried with and without it.
// here it shows the packet corruption. I tried to print packet also it has same problem.
System.out.println("packet received:" + byteArrayToHex(packet_decode.getBytes()));
使用以下函数打印十六进制等效项。
public static String byteArrayToHex(byte[] a) {
StringBuilder sb = new StringBuilder(a.length * 2);
for(byte b: a)
sb.append(String.format("%02x", b & 0xff));
return sb.toString();
}
如果我遗漏了什么,请建议我。我怀疑两个问题 urlencoding 或网络字节排序。