Uzak sistemlerde hangi portların açık olduğu bilgisinin belirlenmesi keşif işleminin olmazsa olmaz adımlarından bir tanesidir.
Bu iş için kullanılabilecek olan en popüler yazılımların başında nmap,hping gelmektedir.
Bu araçların sistemde olmadığı durumlarda uzak sistem üzerinde koşan portların belirlenebilmesi için telnet komutu kullanılabileceği gibi özellikle Linux/Unix sistemlerde kullanılan TCP/IP isviçre çakısı olarakda adlandırılan netcat (nc) komutu bu işi için kullanılabilmektedir.
Uzak sistem üzerinde koşan belirli bir port bilgisi edinmek için telnet komutunun kullanılabileceği belirtilmiştir. Bu işlem için telnet komutunun kullanım formatı aşağıda belirtildiği şekilde olmaktadır.
telnet uzak_sistem[ip_adres|fqdn]
Aynı işlem netcat komutu yardımı ile de gerçekleştirilebilmektedir. Kullanımı aşağıda gösterildiği biçimde olmaktadır.
nc -z uzak_sistem[ip_adres|fqdn]
# nc -w 1 -z 192.168.1.1 23
Görüldüğü gibi 192.168.1.1 ip adresi ile belirtilen uzak sistem üzerinde 23/tcp üzerinde koşan bir servis bulunmuyor.
# nc -w 1 -z 192.168.11.1 22
Connection to 192.168.1.1 22 port [tcp/ssh] succeeded!
Aynı işlem 22/tcp portu için gerçekleştirildiğinde ise başarılı bir şekilde sonuç alınmıştır.
Bu işlem belirli port bilgisi ve ip adresleri için otomatik olarak gerçekleştirilmesi istendiği durumlarda aşağıdaki betik kullanılabilir.
#!/bin/bash
ip_adress=”192.168.1″
scan_ports=”23 80 443″
for ip in `seq 1 254`
do
for port in $scan_ports
do
nc -w 2 -z “$ip_adress.$ip” $port
if [ $? -eq 0 ]
then
echo “$ip_adress.$ip -> $port”
fi
done
done
Betiğe ait örnek kullanım aşağıda görüldüğü gibi olmaktadır.
# ./scan_ports_via_nc
Connection to 192.168.1.31 80 port [tcp/http] succeeded!
192.168.1.31 -> 80
Connection to 192.168.1.111 23 port [tcp/ssh] succeeded!
192.168.1.111 -> 23