Python ile Port Tarama ve Çalışan Servisi Bulma
Merhaba arkadaşlar bugün python ile yazmış olduğum script'de parametre olarak sizden hedef ip adresi , port bilgisi ve eğer isterseniz hedef'in kullandığı işletim sistemini öğrenmek üzere verdiğiniz parametreleri işleyerek sizlere bu script'in amacını , kodlarını ve video ile kullanımı göstereceğim. Haydi bir giriş yapalım...
Arkadaşlar bu scripteki amacım şuydu.Port tarama ,üzerine çalışan servis hakkında bilgi edinme(banner grabbing) ve son olarak isteğe bağlı hedef'in kullandığı işletim sitemi gibi bilgileri yakalayıp getiren pekçok tool var. Bende bu tool'ların kodlarını inceleyerek ve nasıl davrandıklarını anlayarak herhangi bir 3.parti kütüphane eklemeden kendi tool'umu yazmak istedim(Burada nmap kütüphanesi sadece hedef'in kullandığı işletim sistemini öğrenmek için kullanılmıştır.)Burada "-ip" parametresiyle hedefin ip bilgisini "-port" parametresi taranacak port dizisini ve son olarak "-os" verdiğiniz True veya False bilgisiyle'de hedef üzerinde çalışan işletim sistemi öğrenmeyi etkinleştirerek script'i çalıştırıyoruz.
Kötü kod yazdığım için üzgünüm.Daha iyi bir yazılımcı olmak için yazılım geliştirme ve problem çözme yeteneğim üzerinde hala uğraşmaktayım.
#Port-Scan-Banner-Grabb.py # -*- coding: utf-8 -*- # Nmap sadece hedef işletim sisteminin bulmak için kullandım import nmap import socket import argparse import threading import time from bs4 import BeautifulSoup #---------------------- ip_addr_list=[] port_list=[] os_version={} os_stat="" inf = {} #----------------------- #thread start kısmı def Start(ip,ports): ScanPort(ip,ports) def ScanPort(ip,ports): for i in ports: try: s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) socket.setdefaulttimeout(1) resp = s.connect_ex((ip,int(i))) if resp == 0: if int(i) == 80: inf[ip].append({i:banner_grab_HTTP(s)}) else: inf[ip].append({i:banner_grab(s)}) except: pass def banner_grab(conn): try: conn.send('Hello, is it me you\'re looking for? \r\n') ret = conn.recv(1024) resp = str(ret) return resp except Exception, e: return "" def banner_grab_HTTP(conn): try: conn.send('GET HTTP/1.1 \r\n') ret = conn.recv(1024) soup = BeautifulSoup(ret, "html.parser") get = soup.find("address") return get.text except Exception, e: return "" def OS(ip_addr, ports): nm = nmap.PortScanner() for port in ports: nm.scan(str(ip_addr), str(port), arguments='-O') tut = nm[ip_addr]["osmatch"] try: osname = tut[0]["osclass"][0]["osfamily"] print ip_addr, "os --> ", osname break except: pass def Show(): print("#" * 25 + "open ports" + "#" * 25) for i in ip_addr_list: print("-" * 50) if os_stat == "True" or os_stat == "true": OS(i,port_list) for port in inf[i]: print i ,"-->",port if __name__ =="__main__": parser = argparse.ArgumentParser() parser.add_argument("-ip", help="ip address dizisi girin",type=str) parser.add_argument("-port",help="port adresleri giriniz",type=str) parser.add_argument("-os", help="hedef işletim sistmei belirlemek için kullan.(True or False)",type=str) args = parser.parse_args() os_stat=args.os #ip addr'ları listeye ekledik for i in args.ip.split(","): ip_addr_list.append(i) inf[i]=[] #portarı listeye ekledik for i in args.port.split(","): port_list.append(i) #OS statu for i in ip_addr_list: t = threading.Thread(target=Start , args=(i,port_list)) t.start() time.sleep(len(port_list)*7) Show()
Yukarıda paylaşmış olduğum kodda bir sıkıntı yada yapılabilecek iyileştirmeler için bana ulaşabilirseniz çok sevinirim.Okuduğunuz için çok teşekkür ederim.Esen kalın :)