python shell根据ip解析主机名代码

时间:2022-03-04 13:42:54

 

python shell根据ip获取主机名代码示例

 

这篇文章里我们主要分享了python中shell 根据 ip 获取 hostname 或根据 hostname 获取 ip的代码,具体介绍如下。

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

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

代码如下,使用socket模块

?
1
2
3
4
5
>>> 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 命令把远程机器和本地的文本文件都删除

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

下面分享一则简单的windows下python 获取主机名的代码示例,我是win10系统,待会可以试试:

环境:windows10 64位 + python2.7

代码如下:

?
1
2
import socket
hostName = socket.gethostname()

运行结果如下:

?
1
2
3
4
>> import socket
>>> hostName = socket.gethostname()
>>> print hostName
LAPTOP - H7MGGAAT

 python  执行多条shell命令的方式

# coding: UTF-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')

import subprocess
import os
import commands

#os.system('cmd1 && cmd2')
cmd1 = "cd ../"
cmd2 = "ls"
cmd = cmd1 + " && " + cmd2

#如下两种都可以运行
subprocess.Popen(cmd, shell=True)
subprocess.call(cmd,shell=True)