所以这就是我需要做的。我需要一种方法来一次检查大量 IP 上的端口 80 是否打开(如果主机在端口 80 上运行 Web 服务器),速度非常快,然后只保存端口 80 打开的 IP。最快的最佳方法是什么?谢谢。
答案1
200 OK
使用 Python 进行验证非常简单,至少可以验证端口是否打开。然后,如果您发出请求并验证标头(我认为),则可以验证那里是否有 Web 服务器正在运行。
无论如何,要先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()
这将:
打印一条消息到控制台:
Open Port 80 on: xxx.xxx.xxx.xxx
将 IP 记录到文件中:
openips.txt
保存到您运行脚本的任何位置。
答案2
最快的方法:
~ # nmap 192.168.1.0/24 -p 80
只需将 192.168.1.0/24 更改为您的子网/掩码
答案3
查看nmap网站有关nmap
命令行工具的信息,该工具可能已安装在您的系统上。它就是为此目的而设的。记住,不要作恶!
答案4
使用 Nmap 并通过 grep 管道传输输出。