Python3實(shí)現(xiàn)ICMP遠(yuǎn)控后門(上)_補(bǔ)充篇


ICMP后門(上)補(bǔ)充篇


前言

在上一篇文章Python3實(shí)現(xiàn)ICMP遠(yuǎn)控后門(上)中,我簡要講解了ICMP協(xié)議,以及實(shí)現(xiàn)了一個簡單的ping功能,在文章發(fā)表之后,后臺很多朋友留言,說對校驗(yàn)和的計算不是很了解,實(shí)現(xiàn)的ping功能僅實(shí)現(xiàn)了發(fā)送,接收沒有實(shí)現(xiàn),一個完整ping如何實(shí)現(xiàn)等等。本來對于ICMP后門寫三篇文章的,但是對大家的疑惑臨時開辟了一個補(bǔ)充篇,對ICMP協(xié)議校驗(yàn)方式,以及實(shí)現(xiàn)一個完整功能的ping給大家進(jìn)行詳細(xì)的講解。



第一節(jié)?ICMP協(xié)議校驗(yàn)和


對于校驗(yàn)和的計算,我對寫校驗(yàn)和的代碼進(jìn)行了如下注釋,注意看注釋就會明白校驗(yàn)的整個流程。

def checksum(packet):

? ? """

? ? 校驗(yàn)

? ? """

? ?#packet為icmp頭部和data的字節(jié)流,其中icmp校驗(yàn)和字段初始化為0? ??

? ? sum =0

? ?#countTo:記錄packet是有多少個16位,因?yàn)閷γ績蓚€字節(jié)進(jìn)行校驗(yàn)

? ? countTo = (len(packet)//2)*2?

? ? count =0

? ? while count <countTo:

? ? ? ? #將每兩個字節(jié)中的第二個字節(jié)作為高位,第一個字節(jié)作為低位組成16位的值

? ? ? ? sum += ((packet[count+1] << 8) | packet[count])

? ? ? ? count += 2

????#packet并不一定都是偶數(shù)字節(jié),可能是奇數(shù),把最后一個字節(jié)加到sum中

? ? if countTo<len(packet):

? ? ? ? sum += packet[len(packet) - 1]

? ? ? ? sum = sum & 0xffffffff

? ??#sum中超過16位的高位加到低位

? ? sum = (sum >> 16)? +? (sum & 0xffff)

? ? sum = sum + (sum >> 16)

????#對sum取反

? ? answer = ~sum

????#到這應(yīng)該就結(jié)束了,但是字節(jié)序有問題,下面是將主機(jī)字節(jié)序轉(zhuǎn)為網(wǎng)絡(luò)字節(jié)序

????#即高位轉(zhuǎn)低位,低位轉(zhuǎn)高位

? ? answer = answer & 0xffff

? ? answer = answer >> 8 | (answer << 8 & 0xff00)

? ? return answer


第二節(jié)?ICMP報文的標(biāo)識符與序列號

ICMP回送消息(Type = 8),被請求主機(jī)回送響應(yīng)消息(Type = 0),基本格式如下:

回送消息[ECHO]


回送響應(yīng)消息[ECHO REPLY]


  • Code = 0,

  • CheckSum為校驗(yàn)和,重點(diǎn)注意從ICMP的頭部到data結(jié)束(即到整個數(shù)據(jù)包結(jié)束)

  • Identifier為標(biāo)識符,由主機(jī)設(shè)定,一般設(shè)置為進(jìn)程號,回送響應(yīng)消息與回送消息中identifier保持一致

  • Sequence Number為序列號,由主機(jī)設(shè)定,一般設(shè)為由0遞增的序列,回送響應(yīng)消息與回送消息中Sequence Number保持一致

  • data為數(shù)據(jù),由主機(jī)設(shè)定,回送響應(yīng)消息與回送消息中data保持一致


  • 第三節(jié) ping實(shí)現(xiàn)


    在上篇中,我們講解了如何發(fā)送icmp請求,接下來我們實(shí)現(xiàn)如何接受響應(yīng),并計算響應(yīng)時間,效果類似下圖:



    接收ping響應(yīng)的代碼如下:


    ping的超時機(jī)制是通過select模型實(shí)現(xiàn)的。對于Identifier設(shè)置為進(jìn)程號,如下圖所示。



    測試ping效果?


    注意使用管理員權(quán)限運(yùn)行Python腳本,直接ping www.baidu.com



    第四節(jié) 更多干貨


    ping完整版的代碼在知識星球中發(fā)布,更多干貨請關(guān)注知識星球,隨著人數(shù)的增多,價格之后會上漲,越早關(guān)注越多優(yōu)惠。




    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
    平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

    相關(guān)閱讀更多精彩內(nèi)容

    • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
      保川閱讀 6,090評論 1 13
    • ICMP后門 前言 這幾天一直在研究遠(yuǎn)控木馬的一些通信協(xié)議,比如TCP,UDP,ICMP,DNS,HTTP等等,對...
      qiye閱讀 1,566評論 0 2
    • 0. 介紹 本文源自《圖解TCP/IP》第四、五章讀書筆記。一篇文章讓你了解IP協(xié)議。閱讀的時候,注意一般知識點(diǎn)結(jié)...
      天才木木閱讀 5,483評論 0 14
    • 曾經(jīng)有這樣一個傳說,每一棵被砍掉的樹木都會變成一個人來到人間。 多年之前,我總是喜歡在凌晨將藥材切開磨碎...
      達(dá)摩東來閱讀 307評論 0 1
    • 本周學(xué)習(xí)干法第二章節(jié),主要講到熱愛工作,迷戀工作。三百六十行我們應(yīng)該做到干哪行,愛哪行。對自己的工作擁有極大的...
      武敬南閱讀 334評論 0 0

    友情鏈接更多精彩內(nèi)容