如何使用 Wireshark 翻译 Lua 脚本中的“\r\n”字符串
How to translate "\r\n" string in Lua script with Wireshark
我写了一个Lua脚本来分析一些协议。
我想拆分长字符串,所以我需要将它们拆分成行。
但是当我尝试使用 "\r\n" 时,wireshark 中显示的是 "\r\n",而不是新行。
例如,我写了如下代码,但显示"value \r\r\n"。
这意味着“\\”翻译成“\”成功了,但是0x0d和“\r\n”没有翻译出来?
local normalized_value = '\'.."12"..string.char(0x0d).."\r\n"
如何进行这项工作?
最后,我在 Wireshark 的源代码中找到了这个。
是的,wireshark 忽略了这些符号。
您可以在 print.c
中找到它
static void
print_escaped_csv(FILE *fh, const char *unescaped_string)
{
const char *p;
if (fh == NULL || unescaped_string == NULL) {
return;
}
for (p = unescaped_string; *p != '[=10=]'; p++) {
switch (*p) {
case '\b':
fputs("\b", fh);
break;
case '\f':
fputs("\f", fh);
break;
case '\n':
fputs("\n", fh);
break;
case '\r':
fputs("\r", fh);
break;
case '\t':
fputs("\t", fh);
break;
default:
fputc(*p, fh);
}
}
}
所以我决定构建自己的版本
我写了一个Lua脚本来分析一些协议。 我想拆分长字符串,所以我需要将它们拆分成行。
但是当我尝试使用 "\r\n" 时,wireshark 中显示的是 "\r\n",而不是新行。 例如,我写了如下代码,但显示"value \r\r\n"。 这意味着“\\”翻译成“\”成功了,但是0x0d和“\r\n”没有翻译出来?
local normalized_value = '\'.."12"..string.char(0x0d).."\r\n"
如何进行这项工作?
最后,我在 Wireshark 的源代码中找到了这个。 是的,wireshark 忽略了这些符号。 您可以在 print.c
中找到它static void
print_escaped_csv(FILE *fh, const char *unescaped_string)
{
const char *p;
if (fh == NULL || unescaped_string == NULL) {
return;
}
for (p = unescaped_string; *p != '[=10=]'; p++) {
switch (*p) {
case '\b':
fputs("\b", fh);
break;
case '\f':
fputs("\f", fh);
break;
case '\n':
fputs("\n", fh);
break;
case '\r':
fputs("\r", fh);
break;
case '\t':
fputs("\t", fh);
break;
default:
fputc(*p, fh);
}
}
}
所以我决定构建自己的版本