Расширенный доступ к портам с помощью Curl
Теперь, когда вы понимаете основы использования Curl с разными портами, давайте рассмотрим более продвинутые методы доступа к портам и тестирования.
Проверка доступности портов
Curl можно использовать для проверки, открыт ли определенный порт на сервере. Когда порт открыт, Curl попытается установить соединение и, возможно, получить данные. Когда порт закрыт, Curl сообщит об ошибке.
Давайте протестируем некоторые распространенные порты:
## Test if port 80 (HTTP) is open
curl -s -o /dev/null -w "%{http_code}\n" http://example.com:80
Эта команда отобразит код состояния HTTP (обычно 200, если порт открыт и сервер отвечает правильно). Флаг -s
делает Curl тихим, -o /dev/null
перенаправляет вывод в никуда, а -w "%{http_code}\n"
выводит только код состояния HTTP.
Давайте попробуем еще несколько портов:
## Test if port 443 (HTTPS) is open
curl -s -o /dev/null -w "%{http_code}\n" https://example.com:443
Это должно вернуть 200
или другой код состояния HTTP, указывающий на то, что порт 443 открыт.
Теперь давайте протестируем порт, который, вероятно, закрыт:
## Test if port 81 (uncommon) is open
curl -s --connect-timeout 5 http://example.com:81
Эта команда, скорее всего, завершится с сообщением об ошибке, например:
curl: (7) Failed to connect to example.com port 81: Connection refused
или, возможно, произойдет таймаут через 5 секунд (как указано --connect-timeout
):
curl: (28) Connection timed out after 5001 milliseconds
Доступ к FTP-серверам
Curl поддерживает несколько протоколов, включая FTP. Давайте посмотрим, как получить доступ к FTP-серверу:
curl ftp://ftp.gnu.org/gnu/
Эта команда выводит список содержимого каталога по адресу ftp.gnu.org. Вывод может выглядеть так:
drwxr-xr-x 8 1003 1003 4096 Dec 16 2020 0ad
drwxr-sr-x 5 1003 1003 4096 Nov 09 2020 8sync
drwxr-xr-x 2 1003 1003 4096 Jun 05 2015 GNUinfo
drwxr-xr-x 3 1003 1003 4096 Jan 23 2022 GNUnet
...
Создание простого сканера портов
Давайте создадим простой скрипт Bash для сканирования диапазона портов на сервере. Создайте новый файл с именем port_scanner.sh
в вашем каталоге проекта:
nano ~/project/port_scanner.sh
Добавьте следующее содержимое в файл:
#!/bin/bash
## Simple port scanner using curl
## Usage: ./port_scanner.sh <hostname> <start_port> <end_port>
hostname=$1
start_port=$2
end_port=$3
echo "Scanning ports $start_port to $end_port on $hostname..."
echo
for port in $(seq $start_port $end_port); do
## Try to connect with a short timeout
curl -s --connect-timeout 1 "$hostname:$port" > /dev/null
## Check if the connection was successful
if [ $? -eq 0 ]; then
echo "Port $port is OPEN"
else
echo "Port $port is closed"
fi
done
echo
echo "Scan complete!"
Сохраните файл, нажав Ctrl+X
, затем Y
, а затем Enter
.
Сделайте скрипт исполняемым:
chmod +x ~/project/port_scanner.sh
Теперь запустите скрипт для сканирования портов 80-85 на example.com:
~/project/port_scanner.sh example.com 80 85
Вывод покажет, какие порты открыты, а какие закрыты:
Scanning ports 80 to 85 on example.com...
Port 80 is OPEN
Port 81 is closed
Port 82 is closed
Port 83 is closed
Port 84 is closed
Port 85 is closed
Scan complete!
Этот простой скрипт демонстрирует, как Curl можно использовать в качестве базового инструмента сканирования портов. В реальном сценарии вам следует использовать специализированные инструменты, такие как nmap
, для более комплексного сканирования сети, но этот пример показывает универсальность Curl.