socket.gaierror: [Ошибка 8] имя узла или имя_серва, предоставляемые при использовании сокета

#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 Это сработало, похоже, что он отправлял не то, что я ожидал. Спасибо!