Skip to content

Commit

Permalink
Add top and num parameters, docs (#1)
Browse files Browse the repository at this point in the history
* Add top and num IPs configuration

* Docs
  • Loading branch information
v-kamerdinerov authored Oct 27, 2024
1 parent 053ac83 commit b4a924c
Show file tree
Hide file tree
Showing 5 changed files with 254 additions and 31 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
name: lint
name: Lint
on:
push:
branches:
- main
- dev
pull_request:

env:
Expand Down
163 changes: 163 additions & 0 deletions README-RU.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@

# SNI Finder

![GitHub CI Status](https://github.com/v-kamerdinerov/SNI-Finder/actions/workflows/lint.yml/badge.svg)
![GitHub CI Status](https://github.com/v-kamerdinerov/SNI-Finder/actions/workflows/release.yml/badge.svg)
![GitHub](https://img.shields.io/github/license/v-kamerdinerov/SNI-Finder)
[![GitHub tag](https://img.shields.io/github/tag/v-kamerdinerov/SNI-Finder.svg)](https://github.com/v-kamerdinerov/SNI-Finder/tags)

----

<p align="center">
<a href="./README.md">
English
</a>
/
<a href="./README-RU.md">
Русский
</a>
</p>

Это приложение сканирует диапазон IP-адресов на наличие доменов с включенными TLS 1.3 и HTTP/2 (h2). Оно предназначено для определения полезных SNI (Server Name Indication) доменов для различных конфигураций и тестов.

## Оглавление
- [Особенности](#Особенности)
- [Установка](#Установка)
- [Использование](#Использование)
- [Запуск на Linux/Mac OS](#Запуск-в-LinuxMac-OS)
- [Запуск на Windows](#Запуск-под-Windows)
- [Параметры](#Параметры)
- [Пример вывода](#Пример-вывода)
- [Сборка из исходников](#Сборка-из-исходного-кода)
- [Пререквизиты](#Пререквизиты)
- [Шаги сборки](#Шаги-сборки)
- [Этика использования](#Этика-использования)
- [Вклад](#Вклад)
- [Лицензия](#Лицензия)

## Особенности

| Характеристика | Описание |
|--------------------------|-------------------------------------------------------------------------------------------------------------------|
| **TLS 1.3 и HTTP/2** | Сканирует домены, поддерживающие TLS 1.3 и HTTP/2, чтобы определить современные безопасные конфигурации. |
| **Отображение TLS Ping** | Показывает результаты TLS Ping для просканированных доменов, помогая оценить время отклика. |
| **Топ-серверы** | Выводит топ-серверы на основе наименьших значений пинга, что полезно для определения приоритета быстрых серверов. |

### Выходные файлы
- `results.txt`: Содержит подробный журнал сканирования.
- `domains.txt`: Содержит только обнаруженные доменные имена.

> **Примечание:** Рекомендуется запускать этот сканер локально _(с вашим домашним интернетом)_. Запуск сканера в облаке может привести к тому, что VPS-провайдеры пометят ваш аккаунт как подозрительный.
## Установка

Загрузите исполняемый файл, соответствующий архитектуре вашей системы (`amd64` или `arm64`).

## Использование

### Запуск в Linux/Mac OS

1. Скачайте и установите бинарник:
```bash
wget «https://github.com/v-kamerdinerov/SNI-Finder/releases/latest/download/SNI-Finder-$(uname -s | tr A-Z a-z)-amd64» -O SNI-Finder && chmod +x SNI-Finder
```
2. Запустите сканер:
```bash
./SNI-Finder -addr <ip-адрес>
```

### Запуск под Windows

1. Загрузите `.exe` файл с сайта [Releases](https://github.com/v-kamerdinerov/SNI-Finder/releases/latest).
2. Откройте `CMD` или `Powershell` в директории загрузки.
3. Запустите сканер:
```cmd
.\SNI-Finder-windows-amd64.exe -addr <ip-address>
```

> Замените `<ip-адрес>` на диапазон IP-адресов, который вы хотите просканировать.

## Параметры

| Аргумент | Тип | Значение по умолчанию | Описание |
|-------------|--------|-----------------------|--------------------------------------------------------------|
| `-addr` | string | `0.0.0.0` | Начальный адрес для сканирования. |
| `-num` | int | `10000` | Количество IP-адресов для сканирования. |
| `-o` | bool | `true` | Включить или отключить вывод в файл `results.txt`. |
| `-port` | string | `443` | Порт для сканирования. |
| `-showFail` | bool | `false` | Показать логи для неудачных сканирований. |
| `-thread` | int | `128` | Количество потоков для параллельной работы при сканировании. |
| `-timeOut` | int | `4` | Таймаут сканирования в секундах. |
| `-top` | int | `10` | Количество отображаемых наилучших серверов. |

## Пример вывода

Вот пример вывода программы:

```
2024-09-08 22:25:49 37.139.62.38:443 TLS v1.3 ALPN: h2 pixelproof.ru Ping: 22.315ms

2024-09-08 22:25:51 37.139.62.151:443 TLS v1.3 ALPN: h2 maelia.rs Ping: 34.011ms

2024-09-08 22:25:51 37.139.62.192:443 TLS v1.3 ALPN: h2 doterra-challenge.ru Ping: 22.68ms

2024-09-08 22:28:06 Scan completed.

Top servers by TLS Ping:
1: 37.139.41.28:443 TLS v1.3 ALPN: h2 jsdaddy.tech Ping: 3.121ms
2: 37.139.42.255:443 TLS v1.3 ALPN: h2 malyi-biznes.ru Ping: 3.496ms
3: 37.139.42.35:443 TLS v1.3 ALPN: h2 88date.co Ping: 3.797ms
4: 37.139.41.247:443 TLS v1.3 ALPN: h2 you-note.ru Ping: 3.804ms
5: 37.139.43.113:443 TLS v1.3 ALPN: h2 medvuza.ru Ping: 4.029ms
6: 37.139.40.192:443 TLS v1.3 ALPN: h2 xn--8f9ac.xn--p1ai Ping: 9.772ms
7: 37.139.42.68:443 TLS v1.3 ALPN: h2 mega74.ru Ping: 11.621ms
8: 37.139.62.38:443 TLS v1.3 ALPN: h2 pixelproof.ru Ping: 22.315ms
9: 37.139.62.192:443 TLS v1.3 ALPN: h2 doterra-challenge.ru Ping: 22.68ms
10: 37.139.62.151:443 TLS v1.3 ALPN: h2 maelia.rs Ping: 34.011ms
```
## Сборка из исходного кода
### Пререквизиты
Установите `wget`:
```bash
sudo apt install -y wget
```

Запустите этот скрипт для установки Go и других зависимостей _(Debian & Ubuntu & RedOS $ RHEL)_:
```bash
wget «https://raw.githubusercontent.com/v-kamerdinerov/SNI-Finder/main/install-go.sh» -O install-go.sh && chmod +x install-go.sh && bash install-go.sh
```
> **Совет:** После установки рекомендуется перезагрузить систему.
### Шаги сборки

1. Клонируем репозиторий:
```bash
git clone https://github.com/v-kamerdinerov/SNI-Finder.git
```
2. Перейдите в каталог репозитория:
```bash
cd SNI-Finder
```
3. Скачайте и установите все необходимые пакеты:
```bash
go mod tidy
```
4. Соберите проект:
```bash
CGO_ENABLED=0 go build
```

## Этика использования

Данный инструмент предназначен только для образовательных и легальных целей тестирования. Несанкционированное сканирование сетей без разрешения может нарушить законы и привести к серьезным наказаниям. Пользуйтесь ответственно.

## Вклад

Вклад приветствуется! Пожалуйста, сделайте форк репозитория и отправьте запрос на исправление. Убедитесь, что ваш код придерживается существующего стиля и тщательно протестирован.

## Лицензия

Этот проект лицензируется по лицензии MIT. Подробности смотрите в файле [LICENSE](LICENSE).
42 changes: 28 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@
![GitHub](https://img.shields.io/github/license/v-kamerdinerov/SNI-Finder)
[![GitHub tag](https://img.shields.io/github/tag/v-kamerdinerov/SNI-Finder.svg)](https://github.com/v-kamerdinerov/SNI-Finder/tags)

----

<p align="center">
<a href="./README.md">
English
</a>
/
<a href="./README-RU.md">
Русский
</a>
</p>

This app scans a range of IP addresses for domains with TLS 1.3 and HTTP/2 (h2) enabled. It is designed to identify useful SNI (Server Name Indication) domains for various configurations and tests.

## Table of Contents
Expand All @@ -15,21 +27,21 @@ This app scans a range of IP addresses for domains with TLS 1.3 and HTTP/2 (h2)
- [Run on Linux/Mac OS](#run-on-linuxmac-os)
- [Run on Windows](#run-on-windows)
- [Parameters](#parameters)
- [Example Output](#example-output)
- [Building from Source](#building-from-source)
- [Prerequisites](#prerequisites)
- [Build Steps](#build-steps)
- [Example Output](#example-output)
- [Ethical Usage](#ethical-usage)
- [Contribution](#contribution)
- [License](#license)

## Features

| Feature | Description |
|---------------------|----------------------------------------------------------|
| **TLS 1.3 and HTTP/2** | Scans for domains supporting TLS 1.3 and HTTP/2 to identify modern, secure configurations. |
| **TLS Ping Display** | Shows TLS Ping results for the scanned domains, helping assess response times. |
| **Top Servers** | Outputs the top servers based on the lowest ping values, useful for prioritizing fast servers. |
| Feature | Description |
|------------------------|------------------------------------------------------------------------------------------------|
| **TLS 1.3 and HTTP/2** | Scans for domains supporting TLS 1.3 and HTTP/2 to identify modern, secure configurations. |
| **TLS Ping Display** | Shows TLS Ping results for the scanned domains, helping assess response times. |
| **Top Servers** | Outputs the top servers based on the lowest ping values, useful for prioritizing fast servers. |

### Output Files
- `results.txt`: Contains the detailed scan log.
Expand Down Expand Up @@ -67,14 +79,16 @@ Download the appropriate binary for your system architecture (`amd64` or `arm64`

## Parameters

| Argument | Type | Default Value | Description |
|----------------|---------|---------------|-----------------------------------------------------|
| `-addr` | string | `0.0.0.0` | The starting address for the scan. |
| `-port` | string | `443` | The port to scan. |
| `-thread` | int | `128` | The number of threads to run in parallel for scanning. |
| `-o` | bool | `true` | Enable or disable output to the `results.txt` file. |
| `-timeOut` | int | `4` | The scan timeout in seconds. |
| `-showFail` | bool | `false` | Show logs for failed scans. |
| Argument | Type | Default Value | Description |
|-------------|--------|---------------|--------------------------------------------------------|
| `-addr` | string | `0.0.0.0` | The starting address for the scan. |
| `-num` | int | `10000` | The number of IPs to scan. |
| `-o` | bool | `true` | Enable or disable output to the `results.txt` file. |
| `-port` | string | `443` | The port to scan. |
| `-showFail` | bool | `false` | Show logs for failed scans. |
| `-thread` | int | `128` | The number of threads to run in parallel for scanning. |
| `-timeOut` | int | `4` | The scan timeout in seconds. |
| `-top` | int | `10` | The number of top servers to display. |

## Example Output

Expand Down
56 changes: 50 additions & 6 deletions install-go.sh
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,16 +1,56 @@
#!/bin/bash

FontColor_Red="\033[31m"
FontColor_Green="\033[32m"
FontColor_Yellow="\033[33m"
FontColor_Suffix="\033[0m"


log() {
local LEVEL="$1"
local MSG="$2"
case "${LEVEL}" in
INFO)
local LEVEL="[${FontColor_Green}${LEVEL}${FontColor_Suffix}]"
local MSG="${LEVEL} ${MSG}"
;;
WARN)
local LEVEL="[${FontColor_Yellow}${LEVEL}${FontColor_Suffix}]"
local MSG="${LEVEL} ${MSG}"
;;
ERROR)
local LEVEL="[${FontColor_Red}${LEVEL}${FontColor_Suffix}]"
local MSG="${LEVEL} ${MSG}"
;;
*) ;;
esac
echo -e "${MSG}"
}


# Function to check if the script is being run as root
check_root() {
if [ "$EUID" -ne 0 ]; then
echo
echo "Please run this script as root."
log ERROR "Please run this script as root."
echo
sleep 1
exit 1
fi
}

# Function to check if golang is installed
check_go() {
if command -v go > /dev/null; then
log INFO "Golang installed!"
go version
sleep 1
exit 0
else
log WARN "Golang not found. Proceed..."
fi
}

# Function to install dependencies based on package manager
install_package() {
# Detect package manager
Expand All @@ -19,12 +59,12 @@ install_package() {
elif command -v yum > /dev/null; then
PKG_MANAGER="yum"
else
echo "Unsupported package manager. Exiting."
log ERROR "Unsupported package manager. Exiting."
exit 1
fi

echo
echo "Updating the OS and installing dependencies..."
log WARN "Updating the OS and installing dependencies..."
echo
sleep 0.5

Expand All @@ -39,7 +79,7 @@ install_package() {
fi

echo
echo "OS Updated & Dependencies Installed."
log WARN "OS Updated & Dependencies Installed."
echo
sleep 0.5
}
Expand All @@ -48,7 +88,7 @@ install_package() {
install_go() {
local go_version="go1.21.0"
echo
echo "Installing Go $go_version..."
log WARN "Installing Go $go_version..."
echo
sleep 0.5
local go_url="https://go.dev/dl/$go_version.linux-amd64.tar.gz"
Expand Down Expand Up @@ -80,13 +120,17 @@ install_go() {
sleep 0.5

echo
echo "Go $go_version installed successfully."
log INFO "Go $go_version installed successfully."
echo
}


# Check if running as root
check_root

# Check if golang installed
check_go

# Install dependencies for Go and Git
install_package

Expand Down
Loading

0 comments on commit b4a924c

Please sign in to comment.