2017-07-05 41 views
0

此代碼是說主機沒有找到,但有一些在該ip範圍內的主機?錯誤是在socket.gethostbyaddr(IP),但我不知道爲什麼,因爲它是通過IP地址查找主機名的命令?主機未找到錯誤的主機名與ip並排在ipscanner

import subprocess 
import socket 
import os 
with open(os.devnull, "wb") as limbo: 
     for n in xrange(10, 240): 
       ip="10.4.16.{0}".format(n) 
       result=subprocess.Popen(["ping", "-n", "1", "-w", "200", ip], 
         stdout=limbo, stderr=limbo).wait() 
       if result: 
         print (ip, "inactive") 
       else: 
         print (ip, "active", socket.gethostbyaddr(ip)) 

回答

0

一切之前,你的IP地址必須在DNS PTR記錄,顯示它names.otherwise,你這個代碼,你可以檢查是

活躍與否

import subprocess 
import socket 
import os 
import sys 

def lookup(addr): 
    try: 
     return socket.gethostbyaddr(addr) 
    except socket.herror: 
     return None, None, None 
with open(os.devnull, "wb") as limbo: 
    for n in xrange(10, 240): 
     ip="10.4.16.{0}".format(n) 
     if sys.platform=="linux" or sys.platform=="darwin": 
      result=os.system("ping -c 1 -t 1 " + ip+ " > /dev/null 2>&1") 
     else: 
      result=os.system("ping -w 1000 -n 1 " + ip) 

     if result==0: 
      print (ip, "active") 
      name,alias,addresslist = lookup(ip) 
      if name != None: 
       print ("name", name) 
     else: 
      print (ip, "inactive") 
     print "#################################"  
+0

感謝信息 –

+0

我試過了,但它給出的輸出超過主機名你可以建議什麼東西只能獲得主機名 –

+0

後10.4.16.137它給我的錯誤,因爲socket.herror主機沒有找到 –