我正在尝试从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()
你有什么主意吗?
谢谢,这让我发疯。
答案 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)
一样)。
因此,您需要确保清除传递给该函数调用的所有内容。