Port tarayıcı işlevi

Merhabalar bir port tarayıcı nasıl çalışıyor ve ne işe yarıyor diyelimki yaptık ve port taradık bu ne işimize yarayacak ?

Öğrendiğim iki türlü port tarama yöntemi var.

Bunlardan birincisi socket.socket.connect() ile yapılıyor. Ancak bir port kapalıysa ConnectionRefusedError hatası veriyor ve ayrıca OSError: [Errno 106] Transport endpoint is already connected gibi bir hata veriyor. Kodları try: ve except: ile çalıştırınca bu hataları almıyoruz. Ancak sanıyorum açık olan portların listesini de tam alamıyoruz.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

hedef = input("Host Adresi:")


def tara(port):
    try:
        s.connect((hedef, port))
        return True
    except:
        return False

   
if __name__ == '__main__':
    for i in range(65536):
        if tara(i):
            print("Port {} açık".format(i))

Diğer yöntem ise socket.socket.connect_ex() fonksiyonunu kullanmak. Bu yöntemde hata göstergesi kullanılıyor. Eğer işlem başarıya ulaşmısa, hata göstergesi 0 demektir. Ancak daha önce server.py diye bir dosyayı çalıştırırken, 12345 diye bir port kullanmıştım. Program açıkken localhostta, yerel ve harici ip adresinde bir port taraması yapmıştım ama bu portu bulamadı. Bulur diye tahmin ediyordum. Ama server.py dosyasının içindeki adres (farklı ağdaki bir bilgisayar bağlanabilsin diye) boş bir string olarak tanıtılmıştı. Acaba ondan mı bulamadı diye şüpheleniyorum. Belki başka port tarama yöntemleri vardır…

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket


def tara(hedef):  
    hedef_ip = socket.gethostbyname(hedef)
    print("Host {} taranıyor...".format(hedef_ip))
    for i in range(65536):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sonuc = s.connect_ex((hedef_ip, i))
        if sonuc == 0:
            print('Port {} açık'.format(i))
        s.close()


if __name__ == '__main__':
    tara(hedef=input("Host: "))

Şuradan tcp ve udp portlarının listesine bakabilirsiniz.
Mesela 23 numaralı port telnet protokolü, 20, 21 ftp protokolleri, 80 numaralı port http protokolüdür. Mesela yukarıdaki programlardan birini çalıştırdığınız zaman hangi portların açık olduğunu görebilirsiniz.
host kısmına localhost, veya local ipinizi veya harici ip’nizi girebilirsiniz.

Çok teşekkür ederim ancak bir sorum daha var port tarayıcı ile tarama yaptık
ve bir port açık diyelim bu ne işimize yarayacak acaba ?

Açık olan portları kullanabilirsiniz. Örneğin; bir mesajlaşma uygulaması yapıyorsunuz diyelim. Bu uygulamada bir sunucu ve birden fazla istemci olacaktır. Uygulamayı geliştirirken sunucuyu localhostunuzda çalıştırmanız hata ayıklama sürecini oldukça kolaylaştırır. Ancak HTTP için varsayılan port olan 80 portu o an için bir HTTP sunucu tarafından zaten kullanılıyor olabilir. Böyle olmasa bile bazı sistemlerde bu port korunmaktadır ve bu portu kullanabilmek için yönetici izinlerine sahip olmanız gerekir. Böyle bir durumla uğraşmamak için boş olan bir portu kullanmayı isteyebilirsiniz. Mesela boş portlara baktınız ve 12345 portu açık diyelim. Bu durumda uygulamanızı http://localhost:12345 adresinde bir çakışma olmadan rahatlıkla çalıştırabilir ve hata ayıklama sürecini sürdürebilirsiniz.

İyi çalışmalar.

1 Beğeni

Teşekkür ederim iyi zamanlar.

1 Beğeni