Функция контрольной суммы ICMP не возвращается правильно - PullRequest
0 голосов
/ 12 ноября 2018

Я изучаю программу, которую дал мне мой инструктор для моего урока по сетевым технологиям. Предполагается, что Ping-сервер использует ICMP. Однако программа не работает. Я запустил его с WireShark, и он говорит, что байт контрольной суммы не возвращается правильно. Видимо, это работает для моих одноклассников, но не для меня. А для тех, кто может сказать «спроси своего профессора», я пытался спросить его об этом какое-то время, но пока не смог встретиться с ним. Вот функция, которая реализует контрольную сумму.

    def checksum(string):
        csum = 0
        countTo = (len(string) // 2) *2
        count = 0 
        while count < countTo:
            thisVal = ord(strin[count+1]) *256 + ord(string[count])
            csum = csum + this Val 
            csum = csum & 0xffffffff
            count = count +2
        if coutnTo < len(string):
            csum = csum = ord(string[len(string) -1])
            csum = csum & 0xffffffff
        csum = (csumm >> 16) + (csum & 0xffff)
        csum = csum + (csum >>16)
        answer = ~csum
        answer = answer & 0xffff
        answer = answer >> 8 | (answer << 8 & 0xff00)
        return answer

Следует также упомянуть, что для создания строкового аргумента он использует struct.pack примерно так:

    header = struct.pack("bbHHh", ICMP_ECHO_REQUEST,0,0, ID,1)
    data = struct.pack("d",time.time())
    checksum(str(header+data))

Я также запускаю это в Kali Vm, если это имеет значение.

...