Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/samyk/webscan
OSINT (Разведка открытых источников)РазведкаКартирование сетиСбор информации
GitHubsamyk/webscan

webscan

Сетевой сканер на основе браузера и обнаружение локального IP-адреса

РепозиторийСайт
472675 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

webscan

webscan — это веб-сканер, работающий в браузере, для сканирования IP-адресов сети и обнаружения локального IP. Он обнаруживает IP-адреса, привязанные к пользователю/жертве, прослушивая канал данных RTP через WebRTC и выполняя обратное подключение к порту через любые живые IP-адреса, а также обнаруживает все живые IP-адреса в действительных подсетях, отслеживая немедленные тайм-ауты (возвращаемые пакеты TCP RST) от вызовов fetch() или скрытых тегов img, указывающих на действительные подсети/IP-адреса. Работает на мобильных устройствах и настольных компьютерах во всех основных браузерах и ОС. Бета-версия расширяема и позволяет добавлять несколько техник.

webscan использует тот факт, что сокеты не отвечающих тегов img могут быть закрыты для предотвращения ограничений скорости браузера и сети путем изменения атрибута src на URI, не являющийся сокетом (удаление из DOM, как ни странно, не закрывает сокет), или с помощью поддержки сигналов fetch() из интерфейса AbortController().

попробовать webscan вживую здесь
бета-версия здесь

от @SamyKamkar
выпущено 2020/11/07
больше интересных проектов на samy.pl

webscan работает следующим образом

  1. сначала webscan перебирает список распространённых адресов шлюзов
  2. для каждого IP-адреса с помощью fetch() выполняется фиктивное HTTP-соединение с http://common.gateway.ip:1337
  3. если возвращается TCP RST, обещание fetch() будет отклонено или сработает onerror тега img до тайм-аута, что указывает на живой IP
  4. чтобы предотвратить ограничение скорости браузером или сетью, не отвечающие сокеты fetch() закрываются через сигнал AbortController(), а у тегов img атрибут src перенаправляется на URI, не являющийся сокетом, закрывая сокет
  5. когда обнаружен живой шлюз, шаги 1–3 повторяются для каждого IP-адреса в подсети (например, 192.168.0.[1-255])
  6. в браузере открывается канал данных WebRTC, открывающий случайный порт на машине жертвы
  7. для любых IP-адресов, найденных живыми в подсети, устанавливается соединение через канал данных WebRTC с этим хостом
  8. если канал данных WebRTC успешно установлен, мы знаем, что только что установили соединение с собственным локальным IP

реализация

root@kitploit:~
// дождаться завершения сканирования
let scanResults = await webScanAll()
 
// или получать колбэки при обнаружении IP с помощью обещания
let ipsToScan = undefined // сканирует все предопределённые сети, если null
let scanPromise = webScanAll(
  ipsToScan, // массив. если undefined, сканировать шлюзы основных подсетей, затем сканировать живые подсети. поддерживает маски
  {
    rtc: true,   // использовать WebRTC для обнаружения локальных IP-адресов
    logger: l => console.log(l),  // колбэк для логирования
    noRedirect: false, // если true, не перенаправляет с http на http — Chrome пока не корректно обнаруживает IP сети через https
    localCallback:   function(ip) { console.log(`колбэк локального IP: ${ip}`)   },
    subnetCallback:  function(ip) { console.log(`колбэк IP шлюза: ${ip}`)  },
    networkCallback: function(ip) { console.log(`колбэк IP сети: ${ip}`) },
  }
)

возвращает

root@kitploit:~
scanResults = {
  "local": ["192.168.0.109"], // локальный IP-адрес
  "network": { // другие хосты в сети и скорость их ответа
    "192.168.0.1": 97,
    "192.168.0.2": 82,
    "192.168.0.100": 46,
    "192.168.0.109": 0,
    "192.168.0.117": 74,
    "192.168.0.113": 17,
    "192.168.0.112": 21,
    "192.168.0.114": 25,
    "192.168.0.116": 25,
    "192.168.0.115": 25,
    "192.168.0.105": 57,
    "192.168.0.107": 63,
    "192.168.0.103": 64,
    "192.168.0.108": 31
  }
}

Задачи

  • использовать iframe для выполнения сканирования блоками
    • при разрушении фрейма, предположительно, это гарантирует разрыв соединений
    • как несколько iframe, сканирующих разные блоки, работают вместе? Возможно, это позволяет обойти ограничение скорости соединений браузера
  • поддерживать как fetch(), так и img в качестве ядра сканера (реализовано в бета-версии)
    • Safari
      • примечание: тег img хорошо работает в некоторых браузерах, например Safari
      • недостаток: изменение .src, похоже, не прерывает соединение
      • возможное решение: см. примечание выше про iframe
    • Chrome
      • недостаток: Chrome не прерывает соединение при удалении img из DOM
      • решение: Chrome прерывает соединение с img, если изменить .src — это отлично!
      • недостаток: изменение img.src на '#' вызывает ещё один запрос к той же родительской странице
      • недостаток: изменение img.src на 'about:' выдаёт предупреждение в консоли; есть ли что-то другое, что не вызовет запрос?
  • использовать тайминг img как механизм обнаружения локального IP

Протестировано на

  • Chrome 87.0.4280.47 (macOS)
  • Edge 86.0.622.63 (Windows)
  • Firefox 82.0.2 (macOS)
  • Firefox 82.0.2 (Windows 10)
  • Safari 13.1.2 (macOS)
  • mobile Safari (iOS)
  • mobile Chrome (iOS)
Скачать инструмент