Проникновение и зондирование (ICMP)

задняя часть Python рептилия хакер
Проникновение и зондирование (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Название происходит от морских гидролокаторов. Его работа аналогична позиционированию гидролокатора. Просто сеть посылаетICMPпакеты вместо звуковых волн. Цель этой команды состоит в том, чтобы определитьхозяинэто достижимо,расстояниетекущий хостКак далеко.   

ping

   Собственно, два наших сетевых устройстваping, есть дваcaseиз.

  1. тот же сегмент сети

qyw

   Как показано выше, ведущий A, приходитеpingХост B, затем хост A, необходимо инкапсулироватьПакеты уровня 2, он проверит свойMACтаблица адресов, если нет BMACадрес, широковещательный пакет ARP будет отправлен [в предыдущемСетевые статьиЯ уже ясно дал понять, поэтому не буду повторяться здесь.]  

   После того, как коммутатор получит это сообщение, коммутаторMACадресная функция, поэтому он получит, сохранил ли он хостBизMAC.  

   Если есть, вернуть хостуA, если нет, то отправит на все портыARPПолучив трансляцию, другие хосты обнаружили, что ищут не себя, поэтому отбросили сообщение и проигнорировали его.  

   пока хозяинBПосле получения сообщения, я немедленно отвечу, мойMACЧто такое адрес и узнать хост в то же времяAизMACадрес и нажмите ту жеARPФормат сообщения возвращается хостуA, как показано на рисунке:

arp-res

  В это время ведущийAнаучился приниматьBизMAC, положи этоMACупаковано вICMPПакеты уровня 2 протокола к хосту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После получения этого сообщения обнаружено, что хостAизICPMЧтобы повторить запрос, просто нажмитетакой жеформат, возвращает значение хостуA,Законченов одном сегменте сетиизpingпроцесс~~

Адрес назначения адрес источника исходный 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. Различные сегменты сети  

ХозяинAхочуpingхозяинC, Затем хостAобнаружить хозяинаCизIPи янеттот же сегмент сети.

Хозяин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Вперед…

   Если на шлюзе также нет хостаCизMACАдрес остается таким же, как на предыдущем шаге,ARPВещайте, чтобы учиться друг у друга....

маршрутизатор2Порт может узнать хостCизMAC, хозяин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порт узнал хостAизMACслучае, им не нужно делать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пользовательОтправить,Слушатьа такжеРазобратьи маскировать сетевые пакеты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. Передайте I для сканированияP, рассчитать ток区域网все хозяева
  2. Многопоточность перед вызовом нашего инструмента зонда, проверка каждого хоста в сети в цикле.
  3. Хост, к которому можно подключиться, сохраняется
  4. Подготовьте почву для того, что мы собираемся сделать позже
    1
    2
    Подпишитесь на публичный аккаунт WeChat【mindev】,Отвечать【ping] может получить один процессpingизисходный код, присоединяйтесь к владельцу группыпланетаможет быть полученвсеисходный код.

   Готов поделиться и обменяться с вами различными технологиями, личнымпубличный аккаунт[mindev] и Планета знаний[компьютерный мир]   

1