I couldn’t find some off-the-shelf QUIC
pcap files which conform to IETF
draft versions, so I decided to create them myself. Take Client Initial
packet in draft-29 as an example:
(1) Copy following raw packet info into payload.txt
:
c5ff00001d088394c8f03e5157080000 449e4a95245bfb66bc5f93032b7ddd89
fe0ff15d9c4f7050fccdb71c1cd80512 d4431643a53aafa1b0b518b44968b18b
......
Use awk
command to create string from payload.txt
:
$ awk '{for (i = 1; i <= NF; i++) {printf("\"%s\"\n", $i)}}' payload.txt
"c5ff00001d088394c8f03e5157080000"
"449e4a95245bfb66bc5f93032b7ddd89"
"fe0ff15d9c4f7050fccdb71c1cd80512"
"d4431643a53aafa1b0b518b44968b18b"
......
(2) Use a C
program to generate payload array:
#include <stdio.h>
char payload[] =
"c5ff00001d088394c8f03e5157080000"
"449e4a95245bfb66bc5f93032b7ddd89"
......
;
int main(void) {
size_t count = 0;
printf("const uint8_t payload[] = {\n");
for (size_t i = 0; i < strlen(payload); i += 2) {
printf("0x%c%c,", payload[i], payload[i + 1]);
if (++count == 8) {
count = 0;
printf("\n");
} else {
printf(" ");
}
}
printf("};");
return 0;
}
(3) Forge ethernet
, IP
and UDP
headers and use libpcap
APIs to generate pcap
file. The code can be referred here.