滲透&&探測 ( ICMP 篇)

題記

  • hacker
    A hacker is any highly skilled computer expert.
  • script kiddie
    A script kiddie is an unskilled individual who uses scripts or programs developed by others to attach computer systems and networks and deface websites

ping命令

  ping 這個名字來源於航海的聲納定位操做。其操做相似於聲納定位。只不過在網絡裏發送的是ICMP數據包而不是聲波。該命令的目的是用於肯定 某個主機 是否可達,距離 當前主機 多遠。   html

ping

   其實,咱們2臺網絡設備互ping,是有兩種case的。web

  1. 同一網段

qyw

  如上圖,主機A,來ping主機B,那麼主機A,就要封裝 二層報文 ,他會先查本身的MAC地址表,若是沒有B的MAC地址,就會向外發送一個ARP廣播包【在以前的網絡篇已經講的很清楚了,這裏再也不囉嗦】。  shell

  交換機會收到這個報文後,交換機有學習MAC地址的功能,因此他會檢索本身有沒有保存主機BMAC。  微信

  若是有,就返回給主機A,若是沒有,就會向全部端口發送ARP廣播,其它主機收到後,發現不是在找本身,就紛紛丟棄了該報文,不去理會。  網絡

  直到主機B收到了報文後,就當即相應,個人MAC地址是多少,同時學到主機AMAC地址,並按一樣的ARP報文格式返回給主機A,如圖:多線程

arp-res

 這時候主機A學到了主機BMAC,就把這個MAC封裝到ICMP協議的二層報文中向主機B發送,報文格式以下:框架

目的地址 源地址 源IP 目的IP ICMP報文
00-50-56-C0-00-03 00-50-56-C0-00-01 1.1.1.1 1.1.1.3 Echo request

  當主機B收到了這個報文後,發現是主機AICPM回顯請求,就按 一樣 的格式,返回一個值給主機A,這樣就完成了 同一網段內ping過程~~scrapy

目的地址 源地址 源IP 目的IP ICMP報文
00-50-56-C0-00-01 00-50-56-C0-00-03 1.1.1.3 1.1.1.1 Echo answer

  而實際上,我囉嗦了這麼久的的局域網內的PING,實際過程的發生不到 1毫秒~~工具

  1. 不一樣網段  

  主機Aping主機C,那麼主機A發現主機CIP和本身 不是 同一網段。學習

  主機A就去找 網關 轉發,可是他也不知道網關的MAC狀況下呢?  

  他就會向以前那個步驟同樣先發送一個ARP廣播,學到網關的MAC,再發封裝ICMP報文給 網關路由器

  報文格式以下:  

目的地址 源地址 源IP 目的IP ICMP報文
00-50-56-C0-00-02 00-50-56-C0-00-01 1.1.1.1 2.1.1.3 Echo request

  當 路由器 收到主機A發過來的ICMP報文。

  發現本身的目的地址是其自己MAC地址,根據目的的IP2.1.1.1,查 路由表,發現2.1.1.1/24的路由表項。

  獲得一個 出口指針,去掉原來的MAC頭部.加上本身的MAC地址向主機C轉發…

  若是網關也沒有主機CMAC地址,仍是要向前面一個步驟同樣,ARP廣播一下便可相互學到….

  路由器2端口能學到主機CMAC,主機C也能學到路由器2端口的MAC..
  報文格式以下:

目的地址 源地址 源IP 目的IP ICMP報文
00-50-56-C0-00-05 00-50-56-C0-00-04 1.1.1.1 2.1.1.1 Echo request

  最後,在主機C已學到路由器2端口MAC,路由器2端口轉發給路由器1端口。

  路由1端口學到主機AMAC的狀況下,他們就不須要再作ARP解析,就將ICMP的回顯請求回覆過來..

目的地址 源地址 源IP 目的IP ICMP報文
00-50-56-C0-00-04 00-50-56-C0-00-05 2.1.1.1 1.1.1.1 Echo Answer

代碼篇

  既然已經明白了ping命令和ICMP的原理,那麼咱們就能夠用代碼來實現 自動化 工具~~~

  趙四.尼古拉斯基 曾經說過:不要重複造輪子
  那麼,咱們來介紹一下Python處理網絡協議網絡層傳輸層鏈路層 的能手 scapy ,和 爬蟲框架 scrapy 表兄弟關係,開個玩笑~~

  • Scapy 介紹

Scapy 是一個可讓用戶 發送偵聽解析 並假裝網絡報文的Python 程序。這些功能能夠用於製做 偵測掃描攻擊網絡 的工具。

  • 安裝
pip3 install scapy
複製代碼
  • API
    1. 創建一個數據包
    >>> a=IP(ttl=10)
    >>> a
    < IP ttl=10 |>
    >>> a.src
    ’127.0.0.1>>> a.dst="192.168.1.1"
    >>> a
    < IP ttl=10 dst=192.168.1.1 |>
    >>> a.src
    ’192.168.8.14>>> del(a.ttl)
    >>> a
    < IP dst=192.168.1.1 |>
    >>> a.ttl
    64
    複製代碼
    1. 堆加層次(網絡5層模型)
      **/**操做符在兩層之間起到一個 組合 的做用。
      當使用該操做符時,下層 能夠根據其 上層,使它的 一個多個 默認字段被重載。 (您仍能夠賦予您想要的值)一個字符串也能夠被用做原料層(raw layer)。
    >>> IP()
    <IP |>
    >>> IP()/TCP()
    <IP frag=0 proto=TCP |<TCP |>>
    >>> Ether()/IP()/TCP()
    <Ether type=0x800 |<IP frag=0 proto=TCP |<TCP |>>>
    >>> IP()/TCP()/"GET / HTTP/1.0\r\n\r\n"
    <IP frag=0 proto=TCP |<TCP |<Raw load='GET / HTTP/1.0\r\n\r\n' |>>>
    >>> Ether()/IP()/IP()/UDP()
    <Ether type=0x800 |<IP frag=0 proto=IP |<IP frag=0 proto=UDP |<UDP |>>>>
    >>> IP(proto=55)/TCP()
    <IP frag=0 proto=55 |<TCP |>>
    複製代碼
    1. 發送
    >>>  a=Ether()/IP(dst="www.slashdot.org")/TCP()/"GET /index.html HTTP/1.0 \n\n"
    >>>  hexdump(a)
    00 02 15 37 A2 44 00 AE F3 52 AA D1 08 00 45 00  ...7.D...R....E.
    00 43 00 01 00 00 40 06 78 3C C0 A8 05 15 42 23  .C....@.x<....B#
    FA 97 00 14 00 50 00 00 00 00 00 00 00 00 50 02  .....P........P.
    20 00 BB 39 00 00 47 45 54 20 2F 69 6E 64 65 78   ..9..GET /index
    2E 68 74 6D 6C 20 48 54 54 50 2F 31 2E 30 20 0A  .html HTTP/1.0 .
    0A                                               .
    >>> b=str(a)
    >>> b
    '\x00\x02\x157\xa2D\x00\xae\xf3R\xaa\xd1\x08\x00E\x00\x00C\x00\x01\x00\x00@\x06x<\xc0
     \xa8\x05\x15B#\xfa\x97\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00
     \xbb9\x00\x00GET /index.html HTTP/1.0 \n\n'
    複製代碼

  原理API都明白啦,是時候表演咱們 真正的技術
1. 構建一個ICMP包
2. 發送而且接受目的主機的迴應
3. 若是目的主機可達,已3爲結束碼並退出進程

one-ping
這個時候咱們就能夠經過 Python構建了一個探測工具,判斷目的主機的網絡連通性。
one-ping

但僅僅如此還不夠智能,咱們須要加入多進程掃描整個網絡中的活動主機,因此:

  1. 經過要掃描的IP,計算出當前區域網的全部主機
  2. 多線程調用以前咱們的探測工具,循環探測網絡中的每一個主機
  3. 講可以連通的主機保存下來
  4. 爲後面咱們要作的事情作鋪墊
    1
    2
    關注微信公衆帳號【mindev】,回覆【ping】能夠獲取單進程ping源代碼,加入羣主星球便可獲取全部源代碼。

  願意與你們分享交流各類技術,我的公衆帳號[mindev],以及 知識星球[極客世界]   

1
相關文章
相關標籤/搜索