Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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帮助-这不是';t循环?(插座)_Python_Sockets - Fatal编程技术网

Python帮助-这不是';t循环?(插座)

Python帮助-这不是';t循环?(插座),python,sockets,Python,Sockets,我在这里的代码有问题,当我输入一个端口范围时,当它涉及到一个关闭的端口时,程序只会暂停。当它有开放的端口时就可以了。有人能帮忙吗 #!/usr/bin/env python import sys import socket import subprocess address = raw_input("Which IP would you like to scan? ") r1 = input("What starting IP would you like to scan? i.e 10:

我在这里的代码有问题,当我输入一个端口范围时,当它涉及到一个关闭的端口时,程序只会暂停。当它有开放的端口时就可以了。有人能帮忙吗

#!/usr/bin/env python

import sys
import socket
import subprocess

address = raw_input("Which IP would you like to scan?  ")
r1 = input("What starting IP would you like to scan? i.e 10:  ") 
r2 = input("Which ending IP would you like to scan? i.e 300: ")     

print "This can take a while for big port ranges. Scan commencing on", address 

for port in range(r1,r2):    

            sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)        

if(sock.connect_ex((address,port))==0):    
        print "Port " , port, "is open"         
        sock.close()                            
        print " "                                
        print "Scan completed sucessfully"
else: 
    print " "
    print "Scan completed, No ports found!"
问题是(在大多数防火墙下),远程计算机故意不响应进入封闭端口的TCP连接数据包——如果响应了,您的connect_ex()调用将很快失败(errno=ECONNREFUSED)。这将允许您快速继续尝试下一个端口,这不是防火墙设计者想要鼓励的

因此,它们只是忽略传入的TCP数据包,而您的计算机无法确定远程计算机是否故意忽略您,或者是否只是响应缓慢

因此,您真正能做的就是为自己选择一个“合理”的超时,并假设在该超时期间未成功连接的任何TCP连接都必须指示一个防火墙端口


至于如何在Python中实现这一点,它非常简单;有关详细信息,请参阅。

您的缩进似乎已关闭。由于它可以完成扫描,因此现在效果更好,谢谢!尽管出于某种原因,它只会接收一个开放端口。例如,端口80和153打开。如果我扫描79-160,它将拾取80,仅此而已。有什么想法吗?当您使用完套接字后,是否正在调用sock.close()?也许打开的套接字会堆积起来,直到你的程序不能再创建更多。。。