【问题标题】:Get IP from argv fail [closed]从 argv 获取 IP 失败 [关闭]
【发布时间】:2019-06-27 16:10:50
【问题描述】:

我正在尝试从 args 获取网站的 IP 地址。当我直接在源代码中尝试使用网站时,例如 'url='https://google.com' 它可以工作,但是当我尝试使用 'url = sys.argv[1]' 时它会失败。

当我打印 'url = sys.argv[1]' 时,我得到了所需的网站。我试图 str(url) 它,但它也不起作用。

代码如下:

import socket
import sys

# Params
url = sys.argv[1]
# url = str(sys.argv[1])

print (type(url))   # I get the desired url

s = socket.socket()

# Get IP
ip = socket.gethostbyname(url)

# Print Infos
print ('IP Adress : ' + ip + '\n' + 15*'-')

s.close()

你有什么想法吗?

谢谢你,这让我发疯了。

【问题讨论】:

    标签: python argv gethostbyname


    【解决方案1】:

    这是因为你传入了https//:;你需要删除它:

    In [3]: ip = socket.gethostbyname("http://google.com")
    ---------------------------------------------------------------------------
    gaierror                                  Traceback (most recent call last)
    <ipython-input-3-7466d856e904> in <module>()
    ----> 1 ip = socket.gethostbyname("http://google.com")
    

    请尝试:

    In [4]: ip = socket.gethostbyname("google.com")
    
    In [5]: ip
    Out[5]: '172.217.25.238'
    

    请注意,您还需要删除任何尾部斜杠,例如,删除 google.com/ 中的 /

    如果您查看man gethostbyname,您会发现您正在发出 DNS 请求:

    gethostbyname() 函数为给定的主机名返回一个 hostent 类型的结构。这里的 name 是标准点表示法的主机名或 IPv4 地址(如inet_addr(3))。

    因此,您需要确保清除传递给该函数调用的所有内容。

    【讨论】:

    • 谢谢。我尝试了 2 个小时让它运行,只需从 args 中删除“http”就可以了。速度很快!
    • 完成了!感谢您的时间。你今天救了我的命哈哈
    猜你喜欢
    • 2023-04-07
    • 2011-09-15
    • 2019-08-10
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    相关资源
    最近更新 更多