笔者有时候需要根据hostname获取ip
比如根据machine.company.com 获得ip 10.173.14.117
本文地址 http://blog.csdn.net/never_cxb/article/details/47831
代码如下,使用socket模块
- >>> import socket
- >>> socket.gethostbyname("www.baidu.com")
- '61.135.169.125'
- >>> socket.gethostbyname("rs.xidian.edu.cn")
- '202.117.119.1'
疑惑:
有时候socket不太稳定,有时候无法获取到 ip 具体原因带查明。
笔者自己想的一个方法,不是很优雅,比较繁琐,不过倒是很健壮。
主要思想是在另一台机器上把 hostname 信息写到文件里,然后把文件拷到本机器上,读取文件里的 hostname 信息。
- 利用 plink 在远程ip机器上执行hostname > %s.hostname命令, 将hostname 信息输出到文件
- 然后利用本地的 pscp 将远程机器上带有hostname的文本文件/root/%s.hostname 复制到本地
- 利用 python 的文本读取功能读取信息, 从中取出hostname字符串
- 收尾工作:利用rm命令把远程机器和本地的文本文件都删除
代码如下:
- def getHostName(ip):
- command = 'java -jar %s %s "hostname > %s.hostname"' %(remoteCmdLoca,ip,ip)
- result = subprocess.call(command, shell=True)
- command = '%s -q -r -pw passwd %s [email protected]%s:/root' % (pscpLoca, pscpLoca, ip)
- result = subprocess.call(command, shell=True)
- command = '%s -q -r -pw passwd [email protected]%s:/root/%s.hostname %s' %(pscpLoca,ip,ip,fileDir)
- result = subprocess.call(command, shell=True)
- fileName = fileDir + ip + '.hostname'
- readFile = open(fileName,'r')
- hostnameInfo = str(readFile.readline().strip('\n'))
- readFile.close()
- subprocess.call('rm '+ fileName, shell=True)
- print "=========%s hostname is %s========" %(ip,hostnameInfo)
- return hostnameInfo
来源: http://www.phpxs.com/code/1009842/