Acesso Avançado a Portas com Curl
Agora que você entende os conceitos básicos de como usar Curl com diferentes portas, vamos explorar técnicas mais avançadas para acesso e teste de portas.
Testando a Disponibilidade de Portas
Curl pode ser usado para verificar se uma porta específica está aberta em um servidor. Quando uma porta está aberta, Curl tentará estabelecer uma conexão e potencialmente receber dados. Quando uma porta está fechada, Curl relatará um erro.
Vamos testar algumas portas comuns:
## Teste se a porta 80 (HTTP) está aberta
curl -s -o /dev/null -w "%{http_code}\n" http://example.com:80
Este comando exibirá o código de status HTTP (normalmente 200 se a porta estiver aberta e o servidor estiver respondendo corretamente). A flag -s torna o Curl silencioso, -o /dev/null redireciona a saída para lugar nenhum e -w "%{http_code}\n" imprime apenas o código de status HTTP.
Vamos tentar mais algumas portas:
## Teste se a porta 443 (HTTPS) está aberta
curl -s -o /dev/null -w "%{http_code}\n" https://example.com:443
Isso deve retornar 200 ou outro código de status HTTP, indicando que a porta 443 está aberta.
Agora, vamos testar uma porta que provavelmente está fechada:
## Teste se a porta 81 (incomum) está aberta
curl -s --connect-timeout 5 http://example.com:81
Este comando provavelmente falhará com uma mensagem de erro como:
curl: (7) Failed to connect to example.com port 81: Connection refused
ou pode expirar após 5 segundos (conforme especificado por --connect-timeout):
curl: (28) Connection timed out after 5001 milliseconds
Acessando Servidores FTP
Curl suporta múltiplos protocolos, incluindo FTP. Vamos ver como acessar um servidor FTP:
curl ftp://ftp.gnu.org/gnu/
Este comando lista o conteúdo do diretório em ftp.gnu.org. A saída pode ser semelhante a:
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
...
Criando um Scanner de Portas Simples
Vamos criar um script Bash simples para escanear uma faixa de portas em um servidor. Crie um novo arquivo chamado port_scanner.sh em seu diretório de projeto:
nano ~/project/port_scanner.sh
Adicione o seguinte conteúdo ao arquivo:
#!/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!"
Salve o arquivo pressionando Ctrl+X, depois Y e, em seguida, Enter.
Torne o script executável:
chmod +x ~/project/port_scanner.sh
Agora, execute o script para escanear as portas 80-85 em example.com:
~/project/port_scanner.sh example.com 80 85
A saída mostrará quais portas estão abertas e quais estão fechadas:
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!
Este script simples demonstra como o Curl pode ser usado como uma ferramenta básica de varredura de portas. Em um cenário do mundo real, você gostaria de usar ferramentas especializadas como nmap para uma varredura de rede mais abrangente, mas este exemplo mostra a versatilidade do Curl.