我是python和套接字编程的新手,并尝试扫描WAN地址的端口。
我从使用nmap知道他打开了端口80和443。
为什么我不能从中读取它以查看它是否打开?此外,当我使用我的程序扫描我的网关时,它显示21和23是打开的,这是NMAP向我显示的内容。但是nmap也告诉我我也有端口80和443,但我的程序并没有选择那些。
由于
def return_banner(ip, port):
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip, port)) #establish connection
banner = s.recv(1024) #receive the first 1024 bytes from socket
return banner
except:
return #will return none
def main():
lan_or_wan()
dictionary_of_open_services = {}
list_of_ports = [20, 21, 22, 23, 25, 80, 8080, 53, 67, 68, 443, 993, 143, 110]
list_of_ports.sort()
if (local == False):
print "local = false"
for port in list_of_ports:
print "scanning: "+WAN_IP+":"+str(port)
software_banner = return_banner(WAN_IP, port)
if (software_banner != None):
dictionary_of_open_services[WAN_IP+":"+str(port)] = software_banner
答案 0 :(得分:0)
由于没有请求,连接已连接但空闲。 socket.setdefaulttimeout(2)
给出超时错误,因此返回None
。要抓住横幅,必须提出某些要求。
要检查端口是否打开,请尝试连接端口。如果连接成功,则返回True,否则返回False。
try:
s.connect((ip, port))
s.close()
return True
except:
return False