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 :)