<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@detectmr</title><author><name>@detectmr</name></author><id>https://teletype.in/atom/detectmr</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/detectmr?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@detectmr?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=detectmr"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/detectmr?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-17T13:04:44.025Z</updated><entry><id>detectmr:Masscan</id><link rel="alternate" type="text/html" href="https://teletype.in/@detectmr/Masscan?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=detectmr"></link><title>MASSCAN</title><published>2022-11-30T18:03:41.417Z</published><updated>2022-11-30T18:03:41.417Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/ae/82/ae82f540-ee5a-4e69-b00b-b5d199c4202f.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://i.imgur.com/zO50G2y.png&quot;&gt;
Masscan - Це сканер портів в Інтернеті. Він може сканувати весь Інтернет менше ніж за 5 хвилин, передаючи 10 мільйонів пакетів в секунду, з однієї машини.</summary><content type="html">
  &lt;figure id=&quot;ZxL2&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://i.imgur.com/zO50G2y.png&quot; width=&quot;1041&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;1DkK&quot;&gt;&lt;br /&gt;Masscan - Це сканер портів в Інтернеті. Він може сканувати весь Інтернет менше ніж за 5 хвилин, передаючи 10 мільйонів пакетів в секунду, з однієї машини.&lt;/p&gt;
  &lt;p id=&quot;gRup&quot;&gt;Його використання ( параметрів, вихід ) схоже на &lt;code&gt;nmap&lt;/code&gt;, найвідоміший сканер портів. Якщо ви сумніваєтесь, спробуйте одну з таких особливостей - функції, які широко підтримують підтримується сканування багатьох машин при поглибленому скануванні однієї машини ні.&lt;/p&gt;
  &lt;p id=&quot;Vik3&quot;&gt;Внутрішньо він використовує асинхронну передачу, подібну до портових сканерів як &lt;code&gt;scanrand&lt;/code&gt;, &lt;code&gt;unicornscan&lt;/code&gt;, і &lt;code&gt;ZMap&lt;/code&gt;. Це гнучкіше, що дозволяє довільні діапазони портів та адрес.&lt;/p&gt;
  &lt;p id=&quot;qNjT&quot;&gt;ПРИМІТКА: masscan використовує своє &lt;strong&gt;спеціальний стек TCP / IP&lt;/strong&gt;. Що-небудь, крім просте сканування портів може спричинити конфлікт із локальним стеком TCP / IP. Це означає для вас потрібно використовувати будь-яке &lt;code&gt;--src-ip&lt;/code&gt; можливість запуску з іншої IP-адреси або використовувати &lt;code&gt;--src-port&lt;/code&gt; налаштувати, які порти джерела використовує masscan, а потім також налаштувати внутрішній брандмауер ( &lt;code&gt;pf&lt;/code&gt; або &lt;code&gt;iptables&lt;/code&gt;) для брандмауера цих портів з решти операційної системи.&lt;/p&gt;
  &lt;p id=&quot;i0Vu&quot;&gt;&lt;/p&gt;
  &lt;h1 id=&quot;YDbv&quot;&gt;Будівля&lt;/h1&gt;
  &lt;p id=&quot;aa3Z&quot;&gt;На Debian / Ubuntu це щось подібне. Це не так дійсно мають будь-які залежності, крім компілятора C (, наприклад &lt;code&gt;gcc&lt;/code&gt; або &lt;code&gt;clang&lt;/code&gt;).&lt;/p&gt;
  &lt;pre id=&quot;kQvv&quot;&gt;sudo apt-get --assume-yes install git make gcc
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
&lt;/pre&gt;
  &lt;p id=&quot;dSJe&quot;&gt;Це ставить програму в &lt;code&gt;masscan/bin&lt;/code&gt; підкаталог. Щоб встановити його ( на Linux ) запустіть:&lt;/p&gt;
  &lt;pre id=&quot;vCHh&quot;&gt;make install
&lt;/pre&gt;
  &lt;p id=&quot;wbaj&quot;&gt;Джерело складається з безлічі невеликих файлів, тому будівництво йде набагато швидше за допомогою багатопотокової збірки. Для цього потрібно більше 2 гігів Малиновий Пі ( і розриває ), тому ви можете використовувати меншу кількість, як &lt;code&gt;-j4&lt;/code&gt; а не всі можливі нитки.&lt;/p&gt;
  &lt;pre id=&quot;FNU6&quot;&gt;make -j
&lt;/pre&gt;
  &lt;p id=&quot;nIxP&quot;&gt;Хоча Linux є основною цільовою платформою, код працює добре на багатьох інших системи ( Windows, macOS тощо ). Ось додаткова інформація про збірку:&lt;/p&gt;
  &lt;ul id=&quot;9Ybg&quot;&gt;
    &lt;li id=&quot;L3UR&quot;&gt;Windows w / Visual Studio: використовуйте проект VS10&lt;/li&gt;
    &lt;li id=&quot;hBD9&quot;&gt;Windows w / MinGW: просто введіть &lt;code&gt;make&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;qilB&quot;&gt;Windows w / cygwin: не працюватиме&lt;/li&gt;
    &lt;li id=&quot;VMUE&quot;&gt;Mac OS X / w XCode: використовуйте проект XCode4&lt;/li&gt;
    &lt;li id=&quot;vVii&quot;&gt;Mac OS X / w cmdline: просто введіть &lt;code&gt;make&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;rCxP&quot;&gt;FreeBSD: тип &lt;code&gt;gmake&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;8bSj&quot;&gt;інше: спробуйте просто скласти всі файли разом, &lt;code&gt;cc src/*.c -o bin/masscan&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;2Ww0&quot;&gt;На macOS, здається, бінарні файли x86 працюють так само швидко під емуляцією ARM.&lt;/p&gt;
  &lt;h1 id=&quot;YUzt&quot;&gt;Використання&lt;/h1&gt;
  &lt;p id=&quot;6HTz&quot;&gt;Використання схоже на &lt;code&gt;nmap&lt;/code&gt;. Щоб сканувати мережевий сегмент для деяких портів:&lt;/p&gt;
  &lt;pre id=&quot;qSBy&quot;&gt;# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112
&lt;/pre&gt;
  &lt;p id=&quot;qcND&quot;&gt;Це буде:&lt;/p&gt;
  &lt;ul id=&quot;ork9&quot;&gt;
    &lt;li id=&quot;qj9X&quot;&gt;сканувати &lt;code&gt;10.x.x.x&lt;/code&gt; підмережа та &lt;code&gt;2603:3001:2d00:da00::x&lt;/code&gt; підмережі&lt;/li&gt;
    &lt;li id=&quot;ifnI&quot;&gt;сканує порт 80 і діапазон від 8000 до 8100 або 102 портів загалом на обох підмережах&lt;/li&gt;
    &lt;li id=&quot;ZMj2&quot;&gt;вихід друку до &lt;code&gt;&amp;lt;stdout&amp;gt;&lt;/code&gt; який можна перенаправити у файл&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;L6d0&quot;&gt;Щоб переглянути повний перелік варіантів, скористайтеся цим &lt;code&gt;--echo&lt;/code&gt; особливість. Це скидає поточну конфігурацію та виходить з ладу. Цей вихід може бути використаний як вхід назад в програму:&lt;/p&gt;
  &lt;pre id=&quot;TVgt&quot;&gt;# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo &amp;gt; xxx.conf
# masscan -c xxx.conf --rate 1000
&lt;/pre&gt;
  &lt;h2 id=&quot;Q50q&quot;&gt;Перевірка банера&lt;/h2&gt;
  &lt;p id=&quot;BfD2&quot;&gt;Masscan може зробити більше, ніж просто виявити, чи відкриті порти. Це також може завершити з&amp;#x27;єднання TCP та взаємодію з додатком при цьому порт, щоб захопити просту інформацію про &amp;quot;банер.&lt;/p&gt;
  &lt;p id=&quot;euNb&quot;&gt;Masscan підтримує перевірку банерів на наступних протоколах:&lt;/p&gt;
  &lt;ul id=&quot;uedk&quot;&gt;
    &lt;li id=&quot;vEXy&quot;&gt;FTP&lt;/li&gt;
    &lt;li id=&quot;OMbv&quot;&gt;HTTP&lt;/li&gt;
    &lt;li id=&quot;XSrE&quot;&gt;IMAP4&lt;/li&gt;
    &lt;li id=&quot;k4ju&quot;&gt;запам&amp;#x27;ятався&lt;/li&gt;
    &lt;li id=&quot;EZ6D&quot;&gt;POP3&lt;/li&gt;
    &lt;li id=&quot;nzih&quot;&gt;SMTP&lt;/li&gt;
    &lt;li id=&quot;lPEe&quot;&gt;СШ&lt;/li&gt;
    &lt;li id=&quot;1Lk6&quot;&gt;SSL&lt;/li&gt;
    &lt;li id=&quot;YEXr&quot;&gt;SMBv1&lt;/li&gt;
    &lt;li id=&quot;wzyE&quot;&gt;SMBv2&lt;/li&gt;
    &lt;li id=&quot;uXta&quot;&gt;Телнет&lt;/li&gt;
    &lt;li id=&quot;YssL&quot;&gt;РДП&lt;/li&gt;
    &lt;li id=&quot;Yl4R&quot;&gt;ВНК&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ndJ3&quot;&gt;Проблема в цьому полягає в тому, що masscan містить власний стек TCP / IP окремо від системи, в якій ви її запускаєте. Коли локальна система отримує SYN-ACK з досліджуваної цілі, він відповідає пакетом RST, який вбиває з&amp;#x27;єднання перед масканом може захопити банер.&lt;/p&gt;
  &lt;p id=&quot;Jmq6&quot;&gt;Найпростіший спосіб запобігти цьому - призначити масовий окремий IP адреса. Це виглядало б як один із наступних прикладів:&lt;/p&gt;
  &lt;pre id=&quot;aMYK&quot;&gt;# masscan 10.0.0.0/8 -p80 --banners --source-ip 192.168.1.200
  # masscan 2a00:1450:4007:810::/112 -p80 --banners --source-ip 2603:3001:2d00:da00:91d7:b54:b498:859d
&lt;/pre&gt;
  &lt;p id=&quot;vijR&quot;&gt;Вибрана вами адреса повинна бути в локальній підмережі, а не в іншому випадку використовуватись іншою системою. Маскан попередить вас, що ви зробили помилка, але ви, можливо, зіпсували зв’язок іншої машини кілька хвилин, тому будьте обережні.&lt;/p&gt;
  &lt;p id=&quot;Zo21&quot;&gt;У деяких випадках, таких як WiFi, це неможливо. У тих випадках можна брандмауер порту, який використовує маскан. Це запобігає локальному стеку TCP / IP побачивши пакет, але Маскан все ще бачить його, оскільки він обходить місцевий стек. Для Linux це виглядатиме так:&lt;/p&gt;
  &lt;pre id=&quot;ww1n&quot;&gt;# iptables -A INPUT -p tcp --dport 61000 -j DROP
# masscan 10.0.0.0/8 -p80 --banners --source-port 61000
&lt;/pre&gt;
  &lt;p id=&quot;G2NF&quot;&gt;Ви, ймовірно, хочете вибрати порти, які не суперечать портам Linux, інакше вибрати для джерел-портів. Ви можете побачити діапазон використання Linux та перенастроїти цей діапазон, переглянувши файл:&lt;/p&gt;
  &lt;pre id=&quot;tzrG&quot;&gt;/proc/sys/net/ipv4/ip_local_port_range
&lt;/pre&gt;
  &lt;p id=&quot;Vnbz&quot;&gt;В останній версії Kali Linux ( 2018-серпень ) цей діапазон становить від 32768 до 60999, так вам слід вибрати порти нижче 32768 або 61000 і вище.&lt;/p&gt;
  &lt;p id=&quot;9cDK&quot;&gt;Встановлення &lt;code&gt;iptables&lt;/code&gt; правило триває лише до наступного перезавантаження. Потрібно шукати, як це зробити збережіть конфігурацію залежно від вашого дистрибутива, наприклад, використання &lt;code&gt;iptables-save&lt;/code&gt; та / або &lt;code&gt;iptables-persistent&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;v72X&quot;&gt;На Mac OS X та BSD є подібні кроки. Щоб дізнатися про діапазони, яких слід уникати, використовувати команду типу:&lt;/p&gt;
  &lt;pre id=&quot;bA5x&quot;&gt;# sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last
&lt;/pre&gt;
  &lt;p id=&quot;IyEQ&quot;&gt;На FreeBSD та старих MacOS використовуйте його &lt;code&gt;ipfw&lt;/code&gt; команда:&lt;/p&gt;
  &lt;pre id=&quot;IZob&quot;&gt;# sudo ipfw add 1 deny tcp from any to any 40000 in
# masscan 10.0.0.0/8 -p80 --banners --source-port 40000
&lt;/pre&gt;
  &lt;p id=&quot;ISgT&quot;&gt;На новіших MacOS та OpenBSD використовуйте &lt;code&gt;pf&lt;/code&gt; утиліта пакетного фільтра. Редагування файлу &lt;code&gt;/etc/pf.conf&lt;/code&gt; додати такий рядок:&lt;/p&gt;
  &lt;pre id=&quot;yBv8&quot;&gt;block in proto tcp from any to any port 40000
&lt;/pre&gt;
  &lt;p id=&quot;U3xK&quot;&gt;Потім, щоб увімкнути брандмауер, запустіть команду:&lt;/p&gt;
  &lt;pre id=&quot;NCN4&quot;&gt;# pfctrl -E    
&lt;/pre&gt;
  &lt;p id=&quot;3wDZ&quot;&gt;Якщо брандмауер вже працює, то перезавантажте або перезавантажте правила з наступною командою:&lt;/p&gt;
  &lt;pre id=&quot;4qEN&quot;&gt;# pfctl -f /etc/pf.conf
&lt;/pre&gt;
  &lt;p id=&quot;xFLn&quot;&gt;Windows не відповідає пакетами RST, тому жодна з цих методик необхідні. Однак masscan все ще розроблений для того, щоб найкраще працювати, використовуючи його власна IP-адреса, тому ви повинні запускати цей шлях, коли це можливо, навіть коли він є не суворо необхідно.&lt;/p&gt;
  &lt;p id=&quot;cze0&quot;&gt;Те саме потрібно для інших перевірок, таких як &lt;code&gt;--heartbleed&lt;/code&gt; перевірити, що є лише формою перевірки банерів.&lt;/p&gt;
  &lt;h2 id=&quot;iAfZ&quot;&gt;Як сканувати весь Інтернет&lt;/h2&gt;
  &lt;p id=&quot;Cw8a&quot;&gt;Хоча корисна для менших внутрішніх мереж, програма справді розроблена з урахуванням всього Інтернету. Це може виглядати приблизно так:&lt;/p&gt;
  &lt;pre id=&quot;vGXa&quot;&gt;# masscan 0.0.0.0/0 -p0-65535
&lt;/pre&gt;
  &lt;p id=&quot;G2wt&quot;&gt;Сканування всього Інтернету погано. З одного боку, частини Інтернету реагують погано сканується. З іншого боку, деякі сайти відстежують сканування та додають вас до списку заборон, який дозволить вам заграти з корисних частин Інтернету. Тому ви хочете виключити багато діапазонів. До чорного списку або виключати діапазони, ви хочете використовувати наступний синтаксис:&lt;/p&gt;
  &lt;pre id=&quot;5ITc&quot;&gt;# masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt
&lt;/pre&gt;
  &lt;p id=&quot;y8wY&quot;&gt;Це просто друкує результати на командному рядку. Ви, мабуть, хочете їх збережено у файлі. Тому ви хочете щось на кшталт:&lt;/p&gt;
  &lt;pre id=&quot;o0Dc&quot;&gt;# masscan 0.0.0.0/0 -p0-65535 -oX scan.xml
&lt;/pre&gt;
  &lt;p id=&quot;q4jF&quot;&gt;Це зберігає результати у файлі XML, що дозволяє легко скинути призводить до отримання бази даних чи чогось іншого.&lt;/p&gt;
  &lt;p id=&quot;tRmv&quot;&gt;Але це йде лише за замовчуванням 100 пакетів / секунду, що буде вічно сканувати Інтернет. Вам потрібно пришвидшити його так:&lt;/p&gt;
  &lt;pre id=&quot;g9Zh&quot;&gt;# masscan 0.0.0.0/0 -p0-65535 --max-rate 100000
&lt;/pre&gt;
  &lt;p id=&quot;XOu4&quot;&gt;Це збільшує швидкість до 100 000 пакетів / секунду, що сканує весь Інтернет ( мінус виключає ) приблизно за 10 годин на порт ( або 655 360 годин якщо сканувати всі порти ).&lt;/p&gt;
  &lt;p id=&quot;XVgc&quot;&gt;Що слід помітити в цьому командному рядку, це те, що це все &lt;code&gt;nmap&lt;/code&gt; сумісні варіанти. Крім того, &amp;quot;невидимі&amp;quot; варіанти, сумісні з &lt;code&gt;nmap&lt;/code&gt; також встановлені для вас: &lt;code&gt;-sS -Pn -n --randomize-hosts --send-eth&lt;/code&gt;. Так само, формат файлу XML натхненний &lt;code&gt;nmap&lt;/code&gt;. Звичайно, є багато відмінностей, тому що &lt;em&gt;асинхронний&lt;/em&gt; характер програми призводить до принципово іншого підходу до проблеми.&lt;/p&gt;
  &lt;p id=&quot;KJao&quot;&gt;Вищевказаний командний рядок трохи громіздкий. Замість того, щоб все ставити на командному рядку він може бути збережений у файлі. Наведені вище налаштування виглядав би так:&lt;/p&gt;
  &lt;pre id=&quot;h0Mo&quot;&gt;# My Scan
rate =  100000.00
output-format = xml
output-status = all
output-filename = scan.xml
ports = 0-65535
range = 0.0.0.0-255.255.255.255
excludefile = exclude.txt
&lt;/pre&gt;
  &lt;p id=&quot;23xl&quot;&gt;Щоб використовувати цей файл конфігурації, використовуйте його &lt;code&gt;-c&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;6kfj&quot;&gt;# masscan -c myscan.conf
&lt;/pre&gt;
  &lt;p id=&quot;qU9S&quot;&gt;Це також полегшує ситуацію, коли ви повторюєте сканування.&lt;/p&gt;
  &lt;p id=&quot;weQC&quot;&gt;За замовчуванням masscan спочатку завантажує файл конфігурації &lt;code&gt;/etc/masscan/masscan.conf&lt;/code&gt;. Будь-які пізніші параметри конфігурації перекривають те, що є у цьому файлі конфігурації за замовчуванням. Ось де я поставив своє &amp;quot;виключне&amp;quot; параметр, щоб я його ніколи не забував. Це просто працює автоматично.&lt;/p&gt;
  &lt;h2 id=&quot;LcTn&quot;&gt;Вихід&lt;/h2&gt;
  &lt;p id=&quot;8AI8&quot;&gt;За замовчуванням masscan виробляє досить великі текстові файли, але це легко перетворити їх у будь-який інший формат. Існує п&amp;#x27;ять підтримуваних форматів виводу:&lt;/p&gt;
  &lt;ol id=&quot;kHuB&quot;&gt;
    &lt;li id=&quot;SQoI&quot;&gt;xml: Просто використовуйте параметр &lt;code&gt;-oX &amp;lt;filename&amp;gt;&lt;/code&gt;. Або використовуйте параметри &lt;code&gt;--output-format xml&lt;/code&gt; і &lt;code&gt;--output-filename &amp;lt;filename&amp;gt;&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;q0Y0&quot;&gt;двійковий: Це формат вбудованого масового сканування. Він створює набагато менші файли так, щоб коли я сканую Інтернет, мій диск не заповнюється. Їх потрібно розібрати, хоч. Параметр командного рядка &lt;code&gt;--readscan&lt;/code&gt; буде читати файли двійкового сканування. Використання &lt;code&gt;--readscan&lt;/code&gt; з &lt;code&gt;-oX&lt;/code&gt; опція створить XML-версію файл результатів.&lt;/li&gt;
    &lt;li id=&quot;AZKQ&quot;&gt;grepable: Це реалізація Nmap -oG вихід, який можна легко проаналізувати за допомогою інструментів командного рядка. Просто використовуйте параметр &lt;code&gt;-oG &amp;lt;filename&amp;gt;&lt;/code&gt;. Або використовуйте параметри &lt;code&gt;--output-format grepable&lt;/code&gt; і &lt;code&gt;--output-filename &amp;lt;filename&amp;gt;&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;Rh2C&quot;&gt;json: Це зберігає результати у форматі JSON. Просто використовуйте параметр &lt;code&gt;-oJ &amp;lt;filename&amp;gt;&lt;/code&gt;. Або використовуйте параметри &lt;code&gt;--output-format json&lt;/code&gt; і &lt;code&gt;--output-filename &amp;lt;filename&amp;gt;&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;Rzs7&quot;&gt;список: Це простий список з одним хостом і парою портів за рядок. Просто використовуйте параметр &lt;code&gt;-oL &amp;lt;filename&amp;gt;&lt;/code&gt;. Або використовуйте параметри &lt;code&gt;--output-format list&lt;/code&gt; і &lt;code&gt;--output-filename &amp;lt;filename&amp;gt;&lt;/code&gt;. Формат:&lt;code&gt;&amp;lt;port state&amp;gt; &amp;lt;protocol&amp;gt; &amp;lt;port number&amp;gt; &amp;lt;IP address&amp;gt; &amp;lt;POSIX timestamp&amp;gt; open tcp 80 XXX.XXX.XXX.XXX 1390380064 &lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2 id=&quot;2BeT&quot;&gt;Порівняння з Nmap&lt;/h2&gt;
  &lt;p id=&quot;oStg&quot;&gt;Там, де це розумно, докладено всіх зусиль, щоб програма була ознайомлена до &lt;code&gt;nmap&lt;/code&gt; користувачі, хоча це принципово інакше. Маскан налаштований для широкого діапазону сканування багатьох машин, тоді як nmap призначений для інтенсивне сканування однієї машини або невеликого діапазону.&lt;/p&gt;
  &lt;p id=&quot;GgpI&quot;&gt;Дві важливі відмінності:&lt;/p&gt;
  &lt;ul id=&quot;gZMh&quot;&gt;
    &lt;li id=&quot;uByw&quot;&gt;не потрібно сканувати порти за замовчуванням, потрібно вказати &lt;code&gt;-p &amp;lt;ports&amp;gt;&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;hyxl&quot;&gt;цільові хости - це IP-адреси або прості діапазони, а не імена DNS, ні фанкі підмережі &lt;code&gt;nmap&lt;/code&gt; може використовувати ( як &lt;code&gt;10.0.0-255.0-255&lt;/code&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;a6X5&quot;&gt;Ви можете придумати &lt;code&gt;masscan&lt;/code&gt; як такі налаштування постійно ввімкнено:&lt;/p&gt;
  &lt;ul id=&quot;LTPJ&quot;&gt;
    &lt;li id=&quot;J1gM&quot;&gt;&lt;code&gt;-sS&lt;/code&gt;: це лише сканування SYN ( в даний час зміниться в майбутньому )&lt;/li&gt;
    &lt;li id=&quot;Frtb&quot;&gt;&lt;code&gt;-Pn&lt;/code&gt;: не пінг господарів спочатку, що є основоположним для операції асинхронізації&lt;/li&gt;
    &lt;li id=&quot;LAla&quot;&gt;&lt;code&gt;-n&lt;/code&gt;: не відбувається роздільної здатності DNS&lt;/li&gt;
    &lt;li id=&quot;PgRz&quot;&gt;&lt;code&gt;--randomize-hosts&lt;/code&gt;: скануйте повністю рандомізовано, завжди ви не можете цього змінити&lt;/li&gt;
    &lt;li id=&quot;Tqo9&quot;&gt;&lt;code&gt;--send-eth&lt;/code&gt;: відправляє за допомогою сировини &lt;code&gt;libpcap&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;G5HO&quot;&gt;Якщо ви хочете список додаткових &lt;code&gt;nmap&lt;/code&gt; сумісні налаштування, використовуйте наступне команда:&lt;/p&gt;
  &lt;pre id=&quot;Naos&quot;&gt;# masscan --nmap
&lt;/pre&gt;
  &lt;h2 id=&quot;KOxA&quot;&gt;Швидкість передачі ( ВАЖЛИВО !! )&lt;/h2&gt;
  &lt;p id=&quot;e2Ck&quot;&gt;Ця програма дуже швидко виводить пакети. У Windows або від VM, він може робити 300 000 пакетів / секунду. У Linux ( немає віртуалізації ) це буде робити 1,6 мільйона пакетів на секунду. Це досить швидко, щоб розплавити більшість мереж.&lt;/p&gt;
  &lt;p id=&quot;q1JI&quot;&gt;Зауважте, що він розтане лише вашу власну мережу. Це рандомізує ціль IP-адреси, щоб вони не переповнювали будь-яку віддалену мережу.&lt;/p&gt;
  &lt;p id=&quot;ZHHX&quot;&gt;За замовчуванням ставка встановлюється на 100 пакетів / секунду. Збільшити ставку до мільйон використовують щось на кшталт &lt;code&gt;--rate 1000000&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;USHq&quot;&gt;Скануючи IPv4 Інтернет, ви будете сканувати безліч підмереж, так що, хоча велика кількість пакетів виходить, кожен цільовий підмереж отримає невелику ставку вхідних пакетів.&lt;/p&gt;
  &lt;p id=&quot;NOXO&quot;&gt;Однак при скануванні IPv6 ви, як правило, зосередитесь на одному цільовий підмереж з мільярдами адрес. Таким чином, ваш дефолт поведінка переповнить цільову мережу. Мережі часто збій під навантаженням, яке може генерувати маскан.&lt;/p&gt;
  &lt;h1 id=&quot;vpm0&quot;&gt;Дизайн&lt;/h1&gt;
  &lt;p id=&quot;4jyT&quot;&gt;У цьому розділі описані основні проблеми дизайну програми.&lt;/p&gt;
  &lt;h2 id=&quot;EloH&quot;&gt;Макет коду&lt;/h2&gt;
  &lt;p id=&quot;Rsmz&quot;&gt;Файл &lt;code&gt;main.c&lt;/code&gt; містить &lt;code&gt;main()&lt;/code&gt; функціонувати, як можна було очікувати. Це також містить &lt;code&gt;transmit_thread()&lt;/code&gt; і &lt;code&gt;receive_thread()&lt;/code&gt; функції. Ці функції були навмисно сплющені та сильно прокоментовані, щоб ви можна прочитати дизайн програми просто шляхом кроку по лінії кожен із них.&lt;/p&gt;
  &lt;h2 id=&quot;3XBl&quot;&gt;Асинхронний&lt;/h2&gt;
  &lt;p id=&quot;sCag&quot;&gt;Це &lt;em&gt;асинхронний&lt;/em&gt; дизайн. Іншими словами, це &lt;code&gt;nmap&lt;/code&gt; що то &lt;code&gt;nginx&lt;/code&gt; веб-сервер повинен &lt;code&gt;Apache&lt;/code&gt;. Він має окрему передачу та отримання нитки, які значною мірою незалежні одна від одної. Це такий самий вид дизайн знайдено в &lt;code&gt;scanrand&lt;/code&gt;, &lt;code&gt;unicornscan&lt;/code&gt;, і &lt;code&gt;ZMap&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;U7PY&quot;&gt;Оскільки він асинхронний, він працює так само швидко, як і базовий пакет дозволяє.&lt;/p&gt;
  &lt;h2 id=&quot;Ap5J&quot;&gt;Рандомізація&lt;/h2&gt;
  &lt;p id=&quot;IVY1&quot;&gt;Ключова відмінність Masscan від інших сканерів полягає в тому, як він рандомізується цілі.&lt;/p&gt;
  &lt;p id=&quot;t3Sp&quot;&gt;Принциповим принципом є наявність єдиної змінної індексу, яка починається з нуль і збільшується на кожен зонд. У коді С це виражається як:&lt;/p&gt;
  &lt;pre id=&quot;Azzw&quot;&gt;for (i = 0; i &amp;lt; range; i++) {
    scan(i);
}
&lt;/pre&gt;
  &lt;p id=&quot;ofMu&quot;&gt;Ми повинні перевести індекс на IP-адресу. Скажімо, що ви хочете сканувати всі &amp;quot;приватні&amp;quot; IP-адреси. Це була б таблиця діапазонів на кшталт:&lt;/p&gt;
  &lt;pre id=&quot;k4gf&quot;&gt;192.168.0.0/16
10.0.0.0/8
172.16.0.0/12
&lt;/pre&gt;
  &lt;p id=&quot;LKRv&quot;&gt;У цьому прикладі перші індекси 64k додаються до 192.168.x.x для формування цільова адреса. Потім наступні 16 мільйонів додаються до 10.x.x.x. Решта індексів у діапазоні застосовуються до 172.16.x.x.&lt;/p&gt;
  &lt;p id=&quot;3oxg&quot;&gt;У цьому прикладі у нас є лише три діапазони. Під час сканування всього Інтернету, у нас на практиці більше 100 діапазонів. Це тому, що ви повинні перейти до чорного списку або виключити багато піддіапазонів. Це розбиває потрібний діапазон на сотні менших діапазонів.&lt;/p&gt;
  &lt;p id=&quot;3pU4&quot;&gt;Це призводить до однієї з найповільніших частин коду. Ми передаємо 10 мільйонів пакети в секунду і повинні конвертувати змінну індексу в IP-адресу для кожного зонда. Ми вирішуємо це, роблячи «двійковий пошук» у невеликому кількість пам&amp;#x27;яті. При цій швидкості пакету ефективність кешу починає домінувати над ефективністю алгоритму. Є багато більш ефективних методик теорія, але всі вони потребують стільки пам’яті, щоб бути повільнішими на практиці.&lt;/p&gt;
  &lt;p id=&quot;XK77&quot;&gt;Ми називаємо функцію, яка перекладається з індексу на IP-адресу то &lt;code&gt;pick()&lt;/code&gt; функція. У використанні це виглядає так:&lt;/p&gt;
  &lt;pre id=&quot;9yIT&quot;&gt;for (i = 0; i &amp;lt; range; i++) {
    ip = pick(addresses, i);
    scan(ip);
}
&lt;/pre&gt;
  &lt;p id=&quot;BYd7&quot;&gt;Masscan підтримує не тільки діапазони IP-адрес, але і діапазони портів. Це означає нам потрібно вибрати зі змінної індексу як IP-адресу, так і порт. Це досить просто:&lt;/p&gt;
  &lt;pre id=&quot;9v1M&quot;&gt;range = ip_count * port_count;
for (i = 0; i &amp;lt; range; i++) {
    ip   = pick(addresses, i / port_count);
    port = pick(ports,     i % port_count);
    scan(ip, port);
}
&lt;/pre&gt;
  &lt;p id=&quot;OzGw&quot;&gt;Це призводить до іншої дорогої частини коду. Ділення / модуль інструкції - близько 90 тактових циклів або 30 наносекунд на процесорах x86. Коли передаючи зі швидкістю 10 мільйонів пакетів / секунду, у нас є лише 100 наносекунд на пакет. Я не бачу способу оптимізувати це краще. На щастя, хоча дві такі операції можна виконати одночасно, тому дві з них, як показано вище, не дорожче, ніж робити.&lt;/p&gt;
  &lt;p id=&quot;u2JQ&quot;&gt;Насправді є кілька простих оптимізацій для вищезазначених проблем із продуктивністю, але всі вони покладаються &lt;code&gt;i++&lt;/code&gt;, той факт, що змінна індексу збільшує одну одним через сканування. Власне, нам потрібно рандомізувати цю змінну. Ми потрібно рандомізувати порядок IP-адрес, які ми скануємо, або ми підірвемо чорт із цільових мереж, які не побудовані для цього рівня швидкості. Ми потрібно рівномірно розподілити наш трафік по цілі.&lt;/p&gt;
  &lt;p id=&quot;OYvu&quot;&gt;Те, як ми рандомізуємо, - це просто зашифрування змінної індексу. За визначенням, шифрування є випадковим і створює відображення 1 на 1 між оригінальним індексом змінна і вихід. Це означає, що, поки ми лінійно проходимо через діапазон, вихідні IP-адреси абсолютно випадкові. У коді це виглядає так:&lt;/p&gt;
  &lt;pre id=&quot;6Rev&quot;&gt;range = ip_count * port_count;
for (i = 0; i &amp;lt; range; i++) {
    x = encrypt(i);
    ip   = pick(addresses, x / port_count);
    port = pick(ports,     x % port_count);
    scan(ip, port);
}
&lt;/pre&gt;
  &lt;p id=&quot;v4Tl&quot;&gt;Це також має великі витрати. Оскільки діапазон замість цього непередбачуваний розмір приємної рівномірної потужності 2, ми не можемо використовувати дешеві бінарні методи, як І ( &amp;amp; ) і XOR ( ^ ). Натомість нам доводиться використовувати дорогі операції, як МОДУЛЮС (% ). У моїх нинішніх орієнтирах потрібно 40 наносекунд зашифруйте змінну.&lt;/p&gt;
  &lt;p id=&quot;VknG&quot;&gt;Ця архітектура дозволяє отримати багато цікавих функцій. Наприклад, він підтримує &amp;quot;шматки&amp;quot;. Ви можете налаштувати по 5 машин, кожен з яких виконує п&amp;#x27;яту частину сканування або &lt;code&gt;range / shard_count&lt;/code&gt;. Shards можуть бути декількома машинами або просто декількома мережеві адаптери на одній машині або навіть (, якщо ви хочете ) кілька IP адреси джерел на одному мережевому адаптері.&lt;/p&gt;
  &lt;p id=&quot;ylhH&quot;&gt;Або ви можете використовувати &amp;quot;насіння&amp;quot; або &amp;quot;ключ&amp;quot; для функції шифрування, щоб отримати інший порядок кожного разу, коли ви скануєте, як &lt;code&gt;x = encrypt(seed, i)&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;K5HB&quot;&gt;Ми також можемо призупинити сканування, вийшовши з програми, і просто запам&amp;#x27;ятовування поточного значення &lt;code&gt;i&lt;/code&gt;, і перезавантажте його пізніше. Я роблю це багато під час розвитку. Я бачу, що щось не так у моєму скануванні в Інтернеті, так Я натискаю, щоб зупинити сканування, а потім перезавантажую його після виправлення помилки.&lt;/p&gt;
  &lt;p id=&quot;pDHj&quot;&gt;Ще одна особливість - це повторні перекази / ретри. Пакети іноді потрапляють на Інтернет, тож ви можете відправити два пакети назад. Однак щось таке краплі одного пакета можуть скинути відразу після пакета. Тому ти хочу надіслати копію близько 1 секунди один від одного. Це просто. У нас уже є змінна &amp;quot;швидкість&amp;quot;, яка є кількістю пакетів на секунду передача в, тому функція повторного введення просто використовувати &lt;code&gt;i + rate&lt;/code&gt; як індекс. Одного дня я збираюся зробити дослідження Інтернету, і диференціювати &amp;quot;назад до спини&amp;quot;, &amp;quot;1 секунду&amp;quot;, &amp;quot;10 секунд&amp;quot; і &amp;quot;1 хвилину&amp;quot; повторно передає таким чином, щоб побачити, чи є якась різниця в чому падає.&lt;/p&gt;
  &lt;h2 id=&quot;YeHL&quot;&gt;C10 Масштабованість&lt;/h2&gt;
  &lt;p id=&quot;2bFp&quot;&gt;Асинхронна техніка відома як рішення &amp;quot;проблеми c10k&amp;quot;. Masscan призначений для наступного рівня масштабованості, &amp;quot;проблеми C10M&amp;quot;.&lt;/p&gt;
  &lt;p id=&quot;9x4b&quot;&gt;Рішення C10M - це обхід ядра. Є три первинні ядра обходить в Маскані:&lt;/p&gt;
  &lt;ul id=&quot;ylTF&quot;&gt;
    &lt;li id=&quot;R50W&quot;&gt;користувальницький мережевий драйвер&lt;/li&gt;
    &lt;li id=&quot;GlwL&quot;&gt;стек TCP в режимі користувача&lt;/li&gt;
    &lt;li id=&quot;tkC5&quot;&gt;синхронізація в режимі користувача&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;PV81&quot;&gt;Masscan може використовувати драйвер ДНК PF_RING. Цей драйвер DMA пакує безпосередньо від пам&amp;#x27;яті в режимі користувача до мережевого драйвера з нульовим залученням ядра. Це дозволяє програмному забезпеченню навіть при повільному процесорі передавати пакети максимум швидкість апаратного забезпечення дозволяє. Якщо ви помістите в комп&amp;#x27;ютер 8 мережевих карт 10 Гбіт / с, це означає, що він може передавати зі швидкістю 100 мільйонів пакетів на секунду.&lt;/p&gt;
  &lt;p id=&quot;cTTl&quot;&gt;Masscan має власний вбудований стек TCP для захоплення банерів від TCP з&amp;#x27;єднання. Це означає, що він може легко підтримати 10 мільйонів одночасних TCP з&amp;#x27;єднання, якщо, звичайно, у комп&amp;#x27;ютера достатньо пам&amp;#x27;яті.&lt;/p&gt;
  &lt;p id=&quot;wKud&quot;&gt;У Маскана немає &amp;quot;мутексу&amp;quot;. Сучасні мютекси ( ака. футекси ) - це переважно режим користувача, але у них дві проблеми. Перша проблема полягає в тому, що вони викликають кеш-лінії швидко відскакувати між процесорами. Друге - це коли там це суперечка, вони зроблять системний дзвінок у ядро, яке вбиває продуктивність. Мутекс на швидкому шляху програми сильно обмежує масштабованість. Натомість Маскан використовує &amp;quot;кільця&amp;quot; для синхронізації речей, наприклад, коли стек TCP в режимі користувача в приймальній нитці повинен передавати пакет без заважаючи потоку передачі.&lt;/p&gt;
  &lt;h2 id=&quot;4GpO&quot;&gt;Переносність&lt;/h2&gt;
  &lt;p id=&quot;kLXc&quot;&gt;Код добре працює в Linux, Windows та Mac OS X. Усі важливі біти є у стандарті C ( C90 ). Тому він компілює на Visual Studio з Microsoft компілятор, компілятор Clang / LLVM на Mac OS X та GCC на Linux.&lt;/p&gt;
  &lt;p id=&quot;utjx&quot;&gt;Windows і Mac не налаштовані на передачу пакетів і отримують лише близько 300 000 пакети за секунду, тоді як Linux може робити 1500 000 пакетів / секунду. Це напевно, швидше, ніж ти хочеш.&lt;/p&gt;
  &lt;h2 id=&quot;xir2&quot;&gt;Безпечний код&lt;/h2&gt;
  &lt;p id=&quot;nFfn&quot;&gt;Для вразливих ситуацій пропонується щедрість, див. Файл VULNINFO.md для отримання додаткової інформації інформація.&lt;/p&gt;
  &lt;p id=&quot;yha7&quot;&gt;Цей проект використовує безпечні функції, як &lt;code&gt;strcpy_s()&lt;/code&gt; замість небезпечних функцій як &lt;code&gt;strcpy()&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;EB0v&quot;&gt;Цей проект має автоматизовані випробування на регресію блоку (&lt;code&gt;make regress&lt;/code&gt;).&lt;/p&gt;
  &lt;h2 id=&quot;SE1m&quot;&gt;Сумісність&lt;/h2&gt;
  &lt;p id=&quot;GRyI&quot;&gt;Багато зусиль доклали до того, щоб зробити вхід / вихід схожим &lt;code&gt;nmap&lt;/code&gt;, який кожен, хто робить сканування портів, ( або повинен бути ) знайомий.&lt;/p&gt;
  &lt;h2 id=&quot;jKii&quot;&gt;Співіснування IPv6 та IPv4&lt;/h2&gt;
  &lt;p id=&quot;ceEK&quot;&gt;Masscan підтримує IPv6, але спеціального режиму немає, обидва підтримуються водночас. ( Немає &lt;code&gt;-6&lt;/code&gt; варіант - він завжди доступний ).&lt;/p&gt;
  &lt;p id=&quot;0cfR&quot;&gt;У будь-якому прикладі ви бачите використання масових, просто введіть IPv6-адресу, де ви бачите IPv4-адресу. Ви можете включити IPv4 та IPv6 адреси одночасно в одному скануванні. Вихід включає відповідна адреса в тому ж місці, без спеціального маркування.&lt;/p&gt;
  &lt;p id=&quot;cHGD&quot;&gt;Пам&amp;#x27;ятайте лише, що адресний простір IPv6 дійсно великий. Ви, мабуть, не хочете сканувати для великих діапазонів, за винятком, можливо, перших 64 к адрес підмережі, які були призначені через DHCPv6.&lt;/p&gt;
  &lt;p id=&quot;Br5m&quot;&gt;Натомість ви, ймовірно, захочете сканувати великі списки збережених адрес у файлі (&lt;code&gt;--include-file filename.txt&lt;/code&gt;), що ви отримали з інших джерел. Як і скрізь, цей файл може містити списки як IPv4, так і IPv6 адрес. Тестовий файл, який я використовую, містить 8 мільйонів адрес. Файли такого розміру потребують пари додаткові секунди, які потрібно прочитати при запуску ( masscan сортує адреси та видаляє дублює перед скануванням ).&lt;/p&gt;
  &lt;p id=&quot;dmEx&quot;&gt;Пам&amp;#x27;ятайте, що masscan містить власний мережевий стек. Таким чином, локальна машина Ви запускаєте masscan з не потрібно включати IPv6 - хоча локальний мережа повинна мати можливість маршрутизувати пакети IPv6.&lt;/p&gt;
  &lt;h2 id=&quot;mya9&quot;&gt;PF_RING&lt;/h2&gt;
  &lt;p id=&quot;piHH&quot;&gt;Щоб отримати понад 2 мільйони пакетів / секунду, вам потрібен Intel 10-фунт / с Ethernet адаптер та спеціальний драйвер, відомий як &lt;a href=&quot;http://www.ntop.org/products/packet-capture/pf_ring/pf_ring-zc-zero-copy/&quot; target=&quot;_blank&quot;&gt;&amp;quot;PF_RING ZC&amp;quot; з ntop&lt;/a&gt;. Masscan не потрібно перебудовувати для використання PF_RING. Для використання PF_RING, потрібно створити такі компоненти:&lt;/p&gt;
  &lt;ul id=&quot;I1lD&quot;&gt;
    &lt;li id=&quot;EqZz&quot;&gt;&lt;code&gt;libpfring.so&lt;/code&gt;( встановлено в /usr/lib/libpfring.so )&lt;/li&gt;
    &lt;li id=&quot;zcE1&quot;&gt;&lt;code&gt;pf_ring.ko&lt;/code&gt;( їх драйвер ядра )&lt;/li&gt;
    &lt;li id=&quot;wkZg&quot;&gt;&lt;code&gt;ixgbe.ko&lt;/code&gt;( їх версія драйвера Intel 10-gbps Ethernet )&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;avSQ&quot;&gt;Вам не потрібно створювати їх версію &lt;code&gt;libpcap.so&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;gPa2&quot;&gt;Коли Маскан виявить, що адаптер названий чимось подібним &lt;code&gt;zc:enp1s0&lt;/code&gt; замість цього чогось подібного &lt;code&gt;enp1s0&lt;/code&gt;, він автоматично перейде в режим PF_RING ZC.&lt;/p&gt;
  &lt;p id=&quot;sQwL&quot;&gt;Більш детальну дискусію можна знайти в &lt;strong&gt;PoC | | GTFO 0x15&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;uKB0&quot;&gt;Регресійне тестування&lt;/h2&gt;
  &lt;p id=&quot;D42t&quot;&gt;Проект містить вбудований тест на одиницю:&lt;/p&gt;
  &lt;pre id=&quot;vO0j&quot;&gt;$ make test
bin/masscan --selftest
selftest: success!
&lt;/pre&gt;
  &lt;p id=&quot;C3Wo&quot;&gt;Це тестує багато складних бітів коду. Ви повинні зробити це після будівництва.&lt;/p&gt;
  &lt;h2 id=&quot;qv9A&quot;&gt;Тестування працездатності&lt;/h2&gt;
  &lt;p id=&quot;Ii3d&quot;&gt;Щоб перевірити продуктивність, запустіть щось на зразок наступного на адресу, що викидається, щоб не перевантажувати локальний маршрутизатор:&lt;/p&gt;
  &lt;pre id=&quot;b1mu&quot;&gt;$ bin/masscan 0.0.0.0/4 -p80 --rate 100000000 --router-mac 66-55-44-33-22-11
&lt;/pre&gt;
  &lt;p id=&quot;jUYN&quot;&gt;Блудний &lt;code&gt;--router-mac&lt;/code&gt; зберігає пакети на локальних сегментах мережі так, щоб вони не вийдуть в Інтернет.&lt;/p&gt;
  &lt;p id=&quot;dKWf&quot;&gt;Ви також можете протестувати в режимі &amp;quot;офлайн&amp;quot;, який швидко працює програма без передачі накладних витрат:&lt;/p&gt;
  &lt;pre id=&quot;VjRM&quot;&gt;$ bin/masscan 0.0.0.0/4 -p80 --rate 100000000 --offline
&lt;/pre&gt;
  &lt;p id=&quot;T6az&quot;&gt;Цей другий орієнтир приблизно показує, наскільки швидко програма запуститься, якби вона була використання PF_RING, який має майже нульові накладні витрати.&lt;/p&gt;
  &lt;p id=&quot;M4wV&quot;&gt;До речі, алгоритм рандомізації використовує &amp;quot;цілеспрямовану арифметику&amp;quot;, хронічно повільна робота на процесорах. Сучасні процесори подвоїли швидкість при якому вони виконують цей розрахунок, роблячи &lt;code&gt;masscan&lt;/code&gt; набагато швидше.&lt;/p&gt;

</content></entry></feed>