저는 파이썬에서 LAN 호스트 검색을위한 스크립트를 만들고 있습니다 (scapy yea는 알고 있지만, 학습 경험을 위해 소켓 라이브러리를 사용하려고합니다). 호스트를 발견 할 수 있지만 라이브 응답을 반환하지 않는 호스트에서 라이브 호스트를 분리하는 데 문제가 있습니다. 유일한 표시기는 시간 초과 응답입니다 (ping은 float 또는 None 임). 그러나 ping을 반복 할 수는 없습니다. nontytpe 일 수 있으므로 hasattr을 사용하여 호스트를 검사하려고했지만 빈 사전을 얻습니다. 호스트를 통해 반복 할 수있는 더 좋은 방법이 있습니까? 호스트 목록을 사전으로 만들 수는 있지만 nonetypes를 통해 반복의 문제를 해결하지는 못합니다. 어떤 의견이라도 고맙습니다. 감사합니다. 여기 Nonetype 특성을 가진 목록을 반복하는 방법은 무엇입니까? (파이썬)
`if __name__ == '__main__':
live = []
livee = []
for host, ping in multi_ping_query(subnet).iteritems():
subnet = host, '=', ping
print(subnet)
live.append(subnet)
for ping in live:
check = hasattr(ping, 'Nonetype')
if check == False:
livee.append(host)
print(livee)
은 나도 그와 함께 많은 성공을하지 않았다, 나는 그것이 그러나 연결되지 않는 경우는 문자열을 반환하는 조정 시도 multi_ping_query위한 기능입니다.
def multi_ping_query(hosts, timeout=1, step=512, ignore_errors=False):
results, host_list, id = {}, [], 0
for host in hosts:
try:
host_list.append(socket.gethostbyname(host))
except socket.gaierror:
results[host] = None
while host_list:
sock_list = []
for ip in host_list[:step]: # select supports only a max of 512
id += 1
sock_list.append(PingQuery(ip, id, timeout))
host_list.remove(ip)
# use timeout
asyncore.loop(timeout)
for sock in sock_list:
results[sock.get_host()] = sock.get_result()
return results