从套接字python中读取

时间:2015-04-13 11:05:44

标签: python sockets networking

我是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

1 个答案:

答案 0 :(得分:0)

由于没有请求,连接已连接但空闲。 socket.setdefaulttimeout(2)给出超时错误,因此返回None。要抓住横幅,必须提出某些要求。

要检查端口是否打开,请尝试连接端口。如果连接成功,则返回True,否则返回False。

    try:
        s.connect((ip, port))
        s.close()
        return True
    except:
        return False