Форум сайта python.su
написал сканер портов,вроде все хорошо ,ошибок не выводит,работает и выводит что все порты закрыты.Но,прогоняю тот же диапазон в Nmap и там есть открытые порты.Почему мой код не видит открытые порты,что не правильно?
import socket #from termcolor import colored import ipaddress import threading p =[] def scan(host,port,orb): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Создаем новый сокет sock.settimeout(4) # Устанавливаем таймаут, чтоб скрипт не зависал если попал на открытый порт try: return sock.connect((HOST, port)) # Пробуем подключится except: return print("Port %s closed %s" %( port,host)) # Если возникло исключение -- порт закрыт else: with open (orb,'a') as jy: jy.write(host + port) return print("Порт %s открыт %s." % (port,host)) #выводим информацию что порт открыт sock.close()# закрываем сокет. spis =[] with open ('111.txt','r') as gla: for i in gla: i = i.strip() try: n = ipaddress.ip_network(i) for ip in n: spis.append(ip) except ValueError: print(' детектед ошибка -',ip) ports = [524,61444,80] #Создаем список портов, которые мы хотим просканирвать for i in spis: #Теперь в цикле перебераем все указаные порты t1 = threading.Thread(target=scan, args=(spis.pop(),ports[0],'222.txt')) t2 = threading.Thread(target=scan, args=(spis.pop(), ports[1],'222.txt')) t3 = threading.Thread(target=scan, args=(spis.pop(), ports[2],'222.txt')) t1.start() t2.start() t3.start() t1.join() t2.join() t3.join()
Отредактировано LiamJonson (Ноя. 7, 2018 12:54:14)
Офлайн
LiamJonsonс чего такая увереность что нмап не врет?
работает и выводит что все порты закрыты.Но,прогоняю тот же диапазон в Nmap и там есть открытые порты.
LiamJonsonвы уверены что порты открыты? а что говорит телнет?
.Почему мой код не видит открытые порты,что не правильно?
[code python][/code]
Отредактировано PEHDOM (Ноя. 8, 2018 12:40:34)
Офлайн
PEHDOM
Пподнимите виртуалку(или используйте реальный комп), поставте туда какойнить минимальный линукс, откройте потры, проверте своим скриптом и нмапом, потом закройте, проверте банальным телнетом что порты закрыты и повторите.
тогда будет понятно “где собака порылась”.
PEHDOM
с чего такая увереность что нмап не врет?
Офлайн
LiamJonsonна самомо деле причина в алгоритме работы нмапа. Ваш алогритм очень прямолинейный, открываем сокет , пробуем подключиться, если получилось порт открыт, если нет - закрыт. нмап же работает на более низком уровне, использует tcp syn по умолчанию и не устанавливает до конца соединение.
но вы правы доверяй но проверяй
SYN это используемый по умолчанию и наиболее популярный тип сканирования….. при таком сканировании TCP соединение никогда не устанавливается до конца….источник https://nmap.org/man/ru/man-port-scanning-techniques.html
[code python][/code]
Отредактировано PEHDOM (Ноя. 9, 2018 10:14:47)
Офлайн
решил свою проблему,доработав функцию.Вычитал в книге что есть расширенный метод “connect”.От него и попробывал плясать-взлетело.Почему прошлый не работал так и не понял.Сижу за роутером-думал может он создает проблемы,ковырял его ковырял,вроде все в порядке.Но предыдущий код не видел открытых портов даже на моей машине.
def connScan(host, port,tekst): s = socket(AF_INET, SOCK_STREAM) s.settimeout(2) result = s.connect_ex((str(host),int(port))) global w if result == 0: print(colored("Tcp {} - Port {} is open\n".format(host, port),'green')) else: print(colored("Tcp {} - Port {} is closed\n".format(host,port),'red')) s.close()
Офлайн