# 02 - Скан средствами OC

Если по каким то причинам отсутствует возможность использовать Nmap или любой  другой сканер сети,  то в стандартном наборе ОС Linux есть программы и утилиты которые можно заставить работать на наши цели.  В целом, почти все в Linux можно использовать как технологии двойного назначения.&#x20;

* Netcat&#x20;
* Telnet
* Perl или Python
* Raw sockets (через `/dev/tcp`)
* Hping3 (не входит в стандартный набор ОС)

```bash
// Я написал простой BASH скрипт для демонстрации
#!/bin/bash

# Функция для сканирования с использованием netcat
scan_with_netcat() {
local target_ip=$1
local port=$2
nc -vz "$target_ip" "$port"
}

# Функция для сканирования с использованием telnet
scan_with_telnet() {
local target_ip=$1
local port=$2
telnet "$target_ip" "$port"
}

# Функция для сканирования с использованием hping3
scan_with_hping3() {
local target_ip=$1
local port=$2
hping3 -c 1 -S -p "$port" "$target_ip"
}

# Функция для сканирования с использованием Perl
scan_with_perl() {
local target_ip=$1
local start_port=$2
local end_port=$3

for port in $(seq "$start_port" "$end_port"); do
perl -MIO::Socket::INET -e '
$target_ip = $ARGV[0];
$port = $ARGV[1];
$socket = IO::Socket::INET->new(
PeerAddr => $target_ip,
PeerPort => $port,
Proto    => "tcp",
Timeout  => 1
);
if ($socket) {
print "Port $port is open\n";
close($socket);
}
' "$target_ip" "$port"
done
}

#  bash scan (raw sockets /dev/tcp)
scan_with_bash_raw_socket() {
local target_ip=$1
local start_port=$2
local end_port=$3

for ((port = start_port; port <= end_port; port++)); do
(echo >/dev/tcp/"$target_ip"/"$port") >/dev/null 2>&1 && echo "Port $port is open"
done
}

# Запрос пользовательского ввода
echo "Выберите метод сканирования:"
echo "1. Netcat"
echo "2. Telnet"
echo "3. hping3 ---need apt install hping3"
echo "4. Perl   ---need install - cpan install IO::Socket::INET"
echo "5. bash scan (raw sockets /dev/tcp)"
read -p "Введите номер метода сканирования: " scan_method

read -p "Введите IP-адрес для сканирования: " target_ip

# Проверка выбора метода сканирования и выполнение соответствующей функции
case $scan_method in
1)
read -p "Введите порт для сканирования: " port
scan_with_netcat "$target_ip" "$port"
;;
2)
read -p "Введите порт для сканирования: " port
scan_with_telnet "$target_ip" "$port"
;;
3)
read -p "Введите порт для сканирования: " port
scan_with_hping3 "$target_ip" "$port"
;;

4)
read -p "Введите начальный порт: " start_port
read -p "Введите конечный порт: " end_port
scan_with_perl "$target_ip" "$start_port" "$end_port"
;;

5)
read -p "Введите начальный порт: " start_port
read -p "Введите конечный порт: " end_port
scan_with_bash_raw_socket "$target_ip" "$start_port" "$end_port"
;;
*)
echo "Неверный выбор метода сканирования."
;;
esac

```

Создайте файл,  скопируйте в него скрипт и дайте скрипту права на исполнение

```bash
// создать файл
touch scan_os.sh
//скируйте скрипт и дайте права
chmod +x scan_os.sh
//и запустите
./scan_os.sh
```

<figure><img src="/files/03JGjK9ppB1uMxtBA5Ka" alt=""><figcaption><p>Пример работы скрипта</p></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://reeves0x0.gitbook.io/linux-under-attack/scan/02-skan-sredstvami-oc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
