pcap文件头

1
2
3
\xA1\xB2\xC3\xD4\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\xFF\xFF\x00\x00\x00\x01\x5C\xB0\x6B\xA2\x00\x0F\x31\x0D
\x00\x00\x00\x40\x00\x00\x00\x40

构造pcap包,前24字节是pcap头,接下来的16字节是record头

1
2
\xA1\xB2\xC3\xD4\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\xFF\xFF\x00\x00\x00\x01

1
2
\x5C\xB0\x6B\xA2\x00\x0F\x31\x0D
\x00\x00\x00\x40\x00\x00\x00\x40

构造多个包时,后面的record不用带上前24字节

EX:

1
echo -ne '\xD4\xC3\xB2\xA1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x01\x00\x00\x00\xAB\x09\x09\x5C\xEF\xD6\x0E\x00\xA8\x00\x00\x00\xA8\x00\x00\x00\x52\x68\x00\xCF\x99\x39\xDE\xC1\x27\x0E\x59\x58\x08\x00\x45\x00\x72\x00\x00\x00\x40\x00\x40\x2F\x00\x00\xC0\xA8\x9A\x1C\xC0\xA8\x99\x5F\x10\x00\x88\xbe\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xD8\x49\x0B\xDB\xEC\x50\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xD8\x49\x0B\xDB\xEC\x50\xC0\xA8\x98\x46\x00\x00\x00\x00\x00\x00\xC0\xA8\x99\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > erspan3.pcap

Tool:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

<!DOCTYPE HTML>
<html>
<head>
<script>
// 匹配前空格 ( \w\w)
var regex = /^.*[0-9A-Fa-f]{8}:(( \w\w)+).*$/;
var file_head = "\\xA1\\xB2\\xC3\\xD4\\x00\\x02\\x00\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\\x00\\x01"
var record_head = "\\x5C\\xB0\\x6B\\xA2\\x00\\x0F\\x31\\x0D"

function GenPcap() {
log = document.getElementById("log").value;
lines = log.split("\n")
var result = ""
var inter_str = ""

for (i=0; i<lines.length; i++) {
if(lines[i] == "")
break;
content = regex.exec(lines[i])[1]
result += content
inter_str += content + "\n"
// alert(content)
}
document.getElementById("inter").value = inter_str

// 匹配前空格
reg_count = / \w\w/g
// 统计报文字节数
count = result.match(reg_count).length
// 转成16进制字符串
hex = (count).toString(16)
// 将报文长度填入 record head
rec_head = record_head + "\\x00\\x00\\x00\\x" + hex + "\\x00\\x00\\x00\\x" + hex

var d = new Date();
filename = "" + d.getFullYear() + (d.getMonth() + 1) + d.getDate() + d.getHours() + d.getMinutes() + d.getSeconds() + ".pcap"
document.getElementById("result").value = "echo -ne " + "\"" + file_head + rec_head + "\\x" + result.trim().replace(/ /g,"\\x") + "\"" + " > " + filename;
}

// hex2ip
function hex2ip() {
hex = document.getElementById("hex").value;

if (!hex.startsWith("0x")) {
hex = "0x" + hex
}

value = parseInt(hex)

a = value >>> 24 // >>> 无符号右移
b = (value & 0xFFFFFF) >> 16
c = (value & 0xFFFF) >> 8
d = value & 0xFF

ip = a + "." + b + "." + c + "." + d
document.getElementById("hex_result").innerHTML = ip
}
</script>
<title>
</title>
</head>
<body>
<div>
<p>粘贴从日志里提取的原始数据</p>
<textarea id="log" rows="10" cols="124">
info 20200330143414 fty-vpcgateway19 phygw: 00000000: 6C 92 BF 87 5A E3 6C 92 BF 48 3F 99 08 00 45 40 | l...Z.l..H?...E@
info 20200330143414 fty-vpcgateway19 phygw: 00000010: 00 4C 00 00 40 00 40 11 FD 86 0A 2A 29 84 0A 2A | .L..@.@....*)..*
info 20200330143414 fty-vpcgateway19 phygw: 00000020: FF 02 00 7B 00 7B 00 38 75 FD 23 04 03 E8 00 00 | ...{.{.8u.#.....
info 20200330143414 fty-vpcgateway19 phygw: 00000030: 0B 29 00 00 15 6C 0A 2A FF 01 E2 2C 11 56 45 5E | .)...l.*...,.VE^
info 20200330143414 fty-vpcgateway19 phygw: 00000040: 3C 70 E2 2C 11 5E 47 31 5B D8 E2 2C 11 5E 45 5D | <p.,.^G1[..,.^E]
info 20200330143414 fty-vpcgateway19 phygw: 00000050: 93 57 E2 2C 11 66 45 26 EA 23
</textarea>
</div>
<div>
<p>中间结果</p>
<textarea id="inter" rows="10" cols="124"></textarea>
</div>
<div>
<p>打开 shell 执行以下命令生成 pcap 文件</p>
<textarea id="result" rows="10" cols="124"></textarea><br>
<button type="button" onclick="GenPcap()">GenPcap</button>
</div>
<div>

</div>
<div>
<p>16进制转IP</p>
<textarea id="hex"></textarea>
<p id="hex_result"></p><br>
<button type="button", onclick="hex2ip()">hex2ip</button>
</div>
</body>
</html>