从套接字python读取
我是python和socket编程新手,尝试扫描WAN地址的端口 通过使用nmap,我知道他打开了端口80和443 为什么我不能从中读出来看看它是否打开了???另外,当我用我的程序扫描我的网关时,它显示21和23是打开的,这是NMAP显示给我的。但是nmap也告诉我我也有端口80和443,但是我的程序没有接收到它们 谢谢从套接字python读取,python,sockets,networking,Python,Sockets,Networking,我是python和socket编程新手,尝试扫描WAN地址的端口 通过使用nmap,我知道他打开了端口80和443 为什么我不能从中读出来看看它是否打开了???另外,当我用我的程序扫描我的网关时,它显示21和23是打开的,这是NMAP显示给我的。但是nmap也告诉我我也有端口80和443,但是我的程序没有接收到它们 谢谢 def return_banner(ip, port): try: socket.setdefaulttimeout(2) s = so
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
由于未发出请求,连接已连接,但处于空闲状态
socket.setdefaulttimeout(2)
给出超时错误,因此返回None
。要夺取旗帜,必须提出某些要求
要仅检查端口是否打开,请尝试连接端口。如果连接成功,则返回True,否则返回False
try:
s.connect((ip, port))
s.close()
return True
except:
return False
考虑到您的用例,您不应该像处理读取超时一样处理连接超时:前者可能表示已过滤的端口。后者表示其关联服务不发送横幅的开放端口。两件完全不同的事情。请参阅以获取一些解决方案,因此我应该移除该套接字。setdefaultimeout(2)然后?“要获取横幅,必须提出某些请求。”不必要。某些服务可能会在连接时自动发送横幅。但我同意,通常情况下,通过在端口上发送一些垃圾来获取服务器“错误消息”中的信息来抓取横幅。@SylvainLeroux这就是为什么他的脚本显示21和23是打开的,而80和443是关闭的。正确:要检查这一点,请使用telnet:
telnet localhot 21
应该显示横幅(有时只是登录提示)无需进一步操作。telnet localhost 80
应显示一个“空白”屏幕,直到您实际向服务器发送内容。@srekcahrai这就是连接和检查连接是否成功的意思吗?s=socket.socket()#创建端口
s.bind(“”,12345))#绑定到我自己的端口
s.listen(5)#侦听端口
result=s.connect\u ex((ip,端口))#建立连接
#然后检查结果