Как минимизировать ущерб при программном отключении питания перед надлежащим завершением работы? [закрыто]

AFAICT tshark -xxx ничего не опускает, он просто добавляет hexdump пакета ниже его однострочной интерпретации.

Так что если вам нужно то же самое, то, я думаю, вот что вам нужно:

tcpdump -xx

EDIT: или tcpdump -XX, если вы также хотите ASCII дамп, как это делает tshark

Если вы действительно не хотите никакой интерпретации вообще, только шестнадцатеричный дамп, то:

tcpdump -w - | hexdump

EDIT2: для дальнейшего уточнения - и следуя комментарию roaima - мой ответ выше основан на ближайшем tshark, который я смог найти, который оказался версией 1. 8.10 и выдает следующее (я использую -r вместо -i только для того, чтобы показать один и тот же пакет в каждом примере, не думаю, что это будет иметь значение):

$ tshark -r test.pcap
  1   0.000000 10.55.131.166 -> 10.48.37.151 TCP 78 58311 > https [SYN] Seq=0 Win=65535 Len=0 MSS=1260 WS=32 TSval=1072006161 TSecr=0 SACK_PERM=1

$ tshark -r test.pcap -xxx
  1   0.000000 10.55.131.166 -> 10.48.37.151 TCP 78 58311 > https [SYN] Seq=0 Win=65535 Len=0 MSS=1260 WS=32 TSval=1072006161 TSecr=0 SACK_PERM=1

0000  00 50 56 9e 18 78 00 07 4f 1c e8 00 08 00 45 00   .PV..x..O.....E.
0010  00 40 7b 8b 40 00 36 06 0b 89 0a 37 83 a6 0a 30   .@{.@.6....7...0
0020  25 97 e3 c7 01 bb 77 13 bc 5e 00 00 00 00 b0 02   %.....w..^......
0030  ff ff 9d 35 00 00 02 04 04 ec 01 03 03 05 01 01   ...5............
0040  08 0a 3f e5 84 11 00 00 00 00 04 02 00 00         ..?...........

и затем это было мое предложение для tcpdump (с -n, добавленным для отключения поиска DNS, я изначально не заметил этой разницы):

$ tcpdump -r test.pcap -XX -n
reading from file test.pcap, link-type EN10MB (Ethernet)
17:21:13.507110 IP 10.55.131.166.58311 > 10.48.37.151.https: Flags [S], seq 1997782110, win 65535, options [mss 1260,nop,wscale 5,nop,nop,TS val 1072006161 ecr 0,sackOK,eol], length 0
    0x0000:  0050 569e 1878 0007 4f1c e800 0800 4500  .PV..x..O.....E.
    0x0010:  0040 7b8b 4000 3606 0b89 0a37 83a6 0a30  .@{.@.6....7...0
    0x0020:  2597 e3c7 01bb 7713 bc5e 0000 0000 b002  %.....w..^......
    0x0030:  ffff 9d35 0000 0204 04ec 0103 0305 0101  ...5............
    0x0040:  080a 3fe5 8411 0000 0000 0402 0000       ..?...........
3
01.04.2019, 15:58
1 ответ

Предположим, Linux

Я изучал нечто подобное несколько лет назад. Вопрос, на который я не могу ответить, заключается в том, будет ли сеть по-прежнему доступна в нужное время.

Чтобы на самом деле отключить питание, вместо того, чтобы пытаться подключиться к SystemD или sysvinit, вы действительно должны попытаться подключиться к ядру напрямую с модом ядра.

Когда я искал эту тему, я в конце концов нашел некоторую информацию здесь:Как работает системное отключение ядра Linux внутри?

Это привело меня к коду ядра здесь :https://elixir.bootlin.com/linux/v5.0.5/source/arch/arm64/kernel/process.c#L136

void machine_power_off(void)
{
    local_irq_disable();
    smp_send_stop();
    if (pm_power_off)
        pm_power_off();
}

Чтобы сделать это правильно, вы должны написать модуль ядра, содержащий функцию, которая общается с выключателем питания по сети, а затем зарегистрировать вашу функцию в указателе функций pm_power_off.


Выключение системы может еще больше зависеть от системы. Возможно, самым простым способом было бы вызвать существующую программу командной строки, такую ​​как sutdownили poweroff.

1
27.01.2020, 21:29

Теги

Похожие вопросы