Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从套接字python读取_Python_Sockets_Networking - Fatal编程技术网

从套接字python读取

从套接字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

我是python和socket编程新手,尝试扫描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

由于未发出请求,连接已连接,但处于空闲状态
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,端口))#建立连接
#然后检查结果