插座盖错误:[Errno 8]使用s时提供nodename或servname

2024-04-19 14:20:55 发布

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

我正在编写一个小的portscan程序,运行时出现以下错误:

socket.gaierror: [Errno 8] nodename nor servname provided, or not known.

我发现一些帖子中讨论了同样的错误,但这都与其他模块有关。我试了又试,所以我知道错误是从哪里来的。在

我尝试了:

  • 当我通过编写hosts_ip[1]选择一个特定条目时,下面的代码起作用
  • 我发现,当我使用socket.gethostbyname()并输入例如域名时,将获得该主机的IP。在
  • 当我用引号中的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()

Tags: 文件代码importipisdef错误load