так что это то, что мне нужно сделать. Мне нужен способ проверить, открыт ли порт 80 (если на хосте запущен веб-сервер на порту 80) на множестве IP-адресов одновременно, очень быстро, а затем сохранить только ips, у которых открыт порт 80. Каков был бы лучший способ сделать это быстрее всего? Благодарю.

5 ответов5

3

Самый быстрый способ:

~ # nmap 192.168.1.0/24 -p 80

просто измените 192.168.1.0/24 на свою подсеть / маску

2

Проверьте nmap.org для получения информации об инструменте командной строки nmap , который, возможно, уже установлен в вашей системе. Именно для этой цели. Помни, не делай зла!

2

Это было бы очень просто с Python, по крайней мере, чтобы убедиться, что порт открыт. Затем вы можете проверить, что там работает веб-сервер, если вы сделаете запрос и подтвердите заголовок (я думаю, 200 OK ).

В любом случае, чтобы сделать это в Python установите nmap в вашу систему, а затем привязки python nmap.

#!/usr/bin/env python

import nmap, threading, urllib2, socket

baseip = "108.170.28.{}"

def NmapPortScan( targethost, targetport = 80 ):
    print("Trying: " + str(targethost) )
    scanner = nmap.PortScanner()
    result = scanner.scan( str(targethost), str(targetport) )

    if ( int(result['nmap']['scanstats']['uphosts']) == 1):
        try:
            state = result[str(targethost)]['tcp'][int(targetport)]['state']
            print "State: {} : {}".format(str(targethost), str(state))
            return state
        except:
            print "State: {} : {}".format( str(targethost), "error")
            return "error"
    else:
        print "{}: Not up".format( str(targethost) )
        return "notup"

def CheckHttpStatus( targethost ):
    req = urllib2.urlopen( targethost )
    if( "Content-Type: text/html" in req.info().headers[3] ):
        return True
    else:
        return False

def LogIp( ipaddr ):
    with open("openips.txt", "a") as fi:
        fi.write( ipaddr + '\n' )
        fi.close()

def CheckIps( ip ):
    if ( NmapPortScan( ip ) == "open" ) and ( CheckHttpStatus( "http://" + socket.gethostbyaddr( ip )[0] ) ):
        #if ( CheckHttpStatus( "http://" + socket.gethostbyaddr( ip )[0] ) ):
        LogIp( ip )
        print( "Open Port 80 on: " + str(ip) )

def main():
    for i in range(153, 201):
    #for i in range(153, 154):
        ip = baseip.format(str(i))
        #CheckIps( ip )
        th = threading.Thread(target=CheckIps, args=(ip,))
        th.start()

if __name__ == "__main__":
    main()

Это будет как:

  1. Распечатайте сообщение для консоли: Open Port 80 on: xxx.xxx.xxx.xxx

  2. Записать в файл IP: openips.txt сохраненный в том месте, где вы запускали скрипт.

1

Напишите скрипт, который использует nmap или netcat для запроса рассматриваемых IP-адресов, а затем проанализируйте результат.

0

Используйте Nmap и передайте вывод через grep.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .