Python连接问题

时间:2015-10-08 16:32:39

标签: python network-programming

因此,在最近的一次演讲中学习了一些关于python之后,我决定开发一个脚本,该脚本将在用户定义的有类别范围内找到pc的ip地址和ping。

然后应该将活动地址列表返回给文件。 目前它正在工作但非常缓慢,因为它每次尝试的默认超时为20秒。

我尝试过使用s.settimeout和s.setdefaulttimeout之类的命令,但是当我设置它们时,它没有正确地尝试连接,导致说出每个地址但是第一个地址是不活动的虽然在照明速度方面有联系。所以继承了处理这一切的功能。 ipsections是一个列表,其中每个部分都包含ip地址octects,z是当前未使用的可变量以供将来使用。

def connect(ipSections,z):
  #socket.setdefaulttimeout(5)
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  #s.settimeout(float(1))
  d=0
  for x in range (0,255):
      host = ipSections[0]+'.'+str(x+1)
      print(host)
      try:
          print(host)
          s.connect((host, 80))
          s.shutdown(2)
          s.close()
          s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          f.write(host+'\n')
          #f.write('\n')
          print ('Y')
      except socket.error as e:
          d=d+1
          print('n')
  return d

d=connect(ipSections,z) 

正如我所说它工作正常但如果我拿出默认超时的评论它就不会工作。

另请注意,我已将其写入3.5

1 个答案:

答案 0 :(得分:0)

尝试移动套接字创建代码,如下所示:

def connect(ipSections,z):
  #socket.setdefaulttimeout(5)
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  d=0
  for x in range (0,255):
      host = ipSections[0]+'.'+str(x+1)
      print(host)
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.settimeout(float(1))
      try:
          print(host)
          s.connect((host, 80))
          s.shutdown(2)
          s.close()
          f.write(host+'\n')
          #f.write('\n')
          print ('Y')
      except socket.error as e:
          d=d+1
          print('n')
  return d

d=connect(ipSections,z)

否则在第一次出现套接字错误后,您正在对空套接字描述符进行操作