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


ICMP后門(mén)(上)補(bǔ)充篇


前言

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



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


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

def checksum(packet):

? ? """

? ? 校驗(yàn)

? ? """

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

? ? sum =0

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

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

? ? count =0

? ? while count <countTo:

? ? ? ? #將每?jī)蓚€(gè)字節(jié)中的第二個(gè)字節(jié)作為高位,第一個(gè)字節(jié)作為低位組成16位的值

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

? ? ? ? count += 2

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

? ? if countTo<len(packet):

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

? ? ? ? sum = sum & 0xffffffff

? ??#sum中超過(guò)16位的高位加到低位

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

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

????#對(duì)sum取反

? ? answer = ~sum

????#到這應(yīng)該就結(jié)束了,但是字節(jié)序有問(wèn)題,下面是將主機(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報(bào)文的標(biāo)識(shí)符與序列號(hào)

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

回送消息[ECHO]


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


  • Code = 0,

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

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

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

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


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


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



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


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



    測(cè)試ping效果?


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



    第四節(jié) 更多干貨


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




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

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

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

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