Найти - Пользователи
Полная версия: Не видит открытые порты
Начало » Python для новичков » Не видит открытые порты
1
LiamJonson
написал сканер портов,вроде все хорошо ,ошибок не выводит,работает и выводит что все порты закрыты.Но,прогоняю тот же диапазон в 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()
PEHDOM
LiamJonson
работает и выводит что все порты закрыты.Но,прогоняю тот же диапазон в Nmap и там есть открытые порты.
с чего такая увереность что нмап не врет?
LiamJonson
.Почему мой код не видит открытые порты,что не правильно?
вы уверены что порты открыты? а что говорит телнет?
Пподнимите виртуалку(или используйте реальный комп), поставте туда какойнить минимальный линукс, откройте потры, проверте своим скриптом и нмапом, потом закройте, проверте банальным телнетом что порты закрыты и повторите.
тогда будет понятно “где собака порылась”.
LiamJonson
PEHDOM
Пподнимите виртуалку(или используйте реальный комп), поставте туда какойнить минимальный линукс, откройте потры, проверте своим скриптом и нмапом, потом закройте, проверте банальным телнетом что порты закрыты и повторите.
тогда будет понятно “где собака порылась”.

действительно я забыл о простом телнет,и попробую с виртуалкой-посмотрим что по лучится

PEHDOM
с чего такая увереность что нмап не врет?

ну как говорится вроде не враал,но вы правы доверяй но проверяй
PEHDOM
LiamJonson
но вы правы доверяй но проверяй
на самомо деле причина в алгоритме работы нмапа. Ваш алогритм очень прямолинейный, открываем сокет , пробуем подключиться, если получилось порт открыт, если нет - закрыт. нмап же работает на более низком уровне, использует tcp syn по умолчанию и не устанавливает до конца соединение.
SYN это используемый по умолчанию и наиболее популярный тип сканирования….. при таком сканировании TCP соединение никогда не устанавливается до конца….
источник https://nmap.org/man/ru/man-port-scanning-techniques.html
сотвевтенно если у вас порт отрыт но вы режете его с помощью ipfw, то нмап вполне может считать что порт таки открыт.
LiamJonson
решил свою проблему,доработав функцию.Вычитал в книге что есть расширенный метод “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()


ну это так может кому пригодится
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB