| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
yyuu1411
10年前发布

python shell 根据 ip 获取 hostname

python shell 根据 ip 获取 hostname 或根据 hostname 获取 ip

前言

笔者有时候需要根据hostname获取ip
比如根据machine.company.com 获得ip 10.173.14.117

本文地址 http://blog.csdn.net/never_cxb/article/details/47831

方法1:利用 socket 模块 里的 gethostbyname 函数

代码如下,使用socket模块

>>> import socket  >>> socket.gethostbyname("www.baidu.com")  '61.135.169.125'  >>> socket.gethostbyname("rs.xidian.edu.cn")  '202.117.119.1'

方法2 利用 shell 中 hostname 命令

疑惑:

有时候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 root@%s:/root' % (pscpLoca, pscpLoca, ip)      result = subprocess.call(command, shell=True)      command = '%s -q -r -pw passwd root@%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