使用" socket.setdefaulttimeout"设置默认超时

时间:2017-08-04 04:41:35

标签: python sockets

我正在尝试制作一个简单的端口扫描程序:

socket.setdefaulttimeout(1)

try:
    for port in range(lowport,highport):  
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      #s.settimeout(1)
      x = s.connect_ex((remoteServerIP, port))
      if x == 0:
        print "[+] Port {}:      Open".format(port)
        try:
          s.settimeout(7)
          s.send("blah")
          print s.recv(100)

我的问题是,在' if'之后,套接字超时是否会恢复到默认值(1)。语句完成(因为我认为它应该并且是大多数python)或者我是否需要在迭代中明确地将它放置在'中。我在上面注释了内联的每个端口。目标是超时(1)查看端口是否打开,但是(7)接收横幅..

1 个答案:

答案 0 :(得分:2)

来自socket.setdefaulttimeout的文档:

  

socket.setdefaulttimeout(timeout)

     

以秒为单位设置默认超时   ( float )用于新的套接字对象。值None表示新值   套接字对象没有超时。套接字模块是第一个   导入,默认为None

超时是您在程序开始时设置的一个可配置参数,并且在执行期间保持超时,除非您再次明确更改它。

如果套接字通过设置自己的超时来覆盖默认套接字,则其他套接字不会受到影响。