Python连接问题

2024-05-14 20:33:17 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,在最近的一次讲座中学习了一点python之后,我决定开发一个脚本,该脚本将在用户定义的类范围内查找pc的ip地址和ping地址。你知道吗

然后它应该将活动地址列表返回到一个文件中。 目前,它的工作,但非常缓慢,因为它有一个默认的超时20秒,每次尝试。你知道吗

我试过使用s.settimeout和s.setdefaulttimeout等命令,但是当我设置它们时,它没有正确地尝试连接,这会导致说除了第一个地址之外的每个地址都是非活动的,因为它以光速通过连接。下面是处理这一切的函数。 ipsections是一个列表,每个节中都有ip地址八位字节,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中写了它


Tags: ip脚本host列表stream地址connectsocket
1条回答
网友
1楼 · 发布于 2024-05-14 20:33:17

尝试像这样移动套接字创建代码:

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)

否则,在第一个套接字错误之后,您将对空套接字描述符执行操作

相关问题 更多 >

    热门问题