python shell 根據 ip 獲取 hostname

yyuu1411 8年前發布 | 2K 次閱讀 Python Shell

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
 本文由用戶 yyuu1411 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!