#python
#python
Вопрос:
Я пишу небольшую программу сканирования портов, и при запуске я получаю следующую ошибку:
socket.gaierror: [Ошибка 8] имя узла или имя сервера не указаны или неизвестны.
Я нашел несколько сообщений, в которых обсуждалась та же ошибка, но все это было связано с другими модулями. Я пробовал и экспериментировал, поэтому я знаю, откуда берется ошибка.
Что я пробовал:
- Приведенный ниже код работает, когда я выбираю конкретную запись, записывая, например, hosts_ip[1]
- Я обнаружил, что когда я использую
socket.gethostbyname()
и ввожу, например, доменное имя, я получаю IP-адрес этого хоста. - Код работает, когда я заменяю host_ip (где ошибка) на IP в кавычках, например
127.0.0.1
.
Почему приведенный ниже код не будет работать с записями из файла? Я делаю что-то не так с загрузкой / чтением файла? Заранее спасибо, действительно любопытно, в чем проблема.
import os
import subprocess
import socket
import sys
def load_hosts():
file = open('hosts.txt', 'r')
hosts = file.readlines()
return hosts
def portscan():
hosts = load_hosts()
port = 80
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(4)
for host_ip in hosts:
result = sock.connect_ex((host_ip, port)) #Error is here
if result == 0:
print('[*] Port is open')
else:
print('[-] Port is closed')
sock.close()
Комментарии:
1. Есть ли в
hosts.txt
файле новая строка? Если есть, вы можете проверить этот host.strip() != » перед попыткой подключения2. @OluwafemiSule Это сработало, похоже, что он отправлял не то, что я ожидал. Спасибо!