я упаковал-структуру, используя эту линиюPython структура распаковка для контрольной суммы
# type(8) code(8) checksum(16) process id(16) sequence(16)
packet = struct.pack("bbHHh", ICMP_ECHO_REQUEST, 0, packet_checksum, pid, sequence)
И теперь им с помощью функции вычисления контрольной суммы, которая распаковывает пакет таким образом, что 16 бит, где контрольная сумма должна быть (packet_checksum) удален. Но я не знаю, как это происходит, и что делает функция sum на самом деле? добавить различные элементы ?:
n = len(pkt)
two_bytes = struct.unpack("%sH" % (n/2), pkt)
chksum = sum(two_bytes)
код работает хорошо, мне просто интересно, как это работает.
Вы прочитали [соответствующий] (https://docs.python.org/3/library/struct.html?module-struct#struct.unpack) [документация] (https://docs.python.org /3/library/functions.html?sum#sum)? –
Я озадачен использованием 'n = len (pkt); ... "% sH"% (n/2) ', потому что, ну, H равно 2 байтам, поэтому длина в байтах берется, а затем делится на 2, а затем умножается на длину H, что равно 2. . 'n = (n/2) * 2 Итак, эта часть кажется бессмысленной. – zxq9