从argv获取IP失败

时间:2019-06-27 16:10:50

标签: python argv gethostbyname

我正在尝试从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()

你有什么主意吗?

谢谢,这让我发疯。

1 个答案:

答案 0 :(得分: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类型的结构。这里的名称是主机名或标准点表示法的IPv4地址(与inet_addr(3)一样)。

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