生产实践:
用于中控机上批量解析主机名和IP地址
脚本内容:
生产中在中控机上时常需要查看服务器IP或通过IP查主机名,如果有多个ip或主机名时不太方便,此python脚本使用socket模块可以批量解析主机名和ip,支持读取文件。脚本内容如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
############################################################
# $Name: hc.py
# $Version: v1.0
# $Function: Convert Host Name to IP Address and vice versa
# $Author: Zhihe An
# $organization: chegva.com
# $Create Date: 2020-06-03
############################################################
import os
import socket
import sys
port = int(22)
# 使用提示
def Usage():
print '''\033[;32mUsage: %s [ip or hostname] [-f file] [-h] [--help]
Convert Host Name to IP Address and vice versa
created by anzhihe@chegva.com
\033[0m''' % (os.path.basename(sys.argv[0]))
sys.exit()
# 将IP地址解析成主机名
def ip_to_host(ip):
try:
result = socket.gethostbyaddr(ip)
print result[0] + '\t' + ip
except (socket.gaierror, socket.herror):
print '\033[;33m IP : %s Not found\033[0m' % ip
# 将主机名解析成IP地址
def host_to_ip(host):
try:
#result = socket.getaddrinfo(host,port)
result = socket.getaddrinfo(host,None)
print host + '\t' + result[0][-1][0]
except (socket.gaierror, socket.herror):
print '\033[;33m HOST : %s Not found\033[0m' % host
# 验证IP是否合法
def valid_ip(ip):
try:
socket.inet_aton(ip)
return 'True'
except:
return 'False'
# 指定文件批量操作
def load_file():
try:
file = sys.argv[2]
with open(file,'r') as f:
linesText = f.readlines();
linesText.sort();
for line in linesText:
line = line.strip('\n').strip()
if line:
if valid_ip(line) == 'True':
ip_to_host(line)
elif valid_ip(line) == 'False':
host_to_ip(line)
except:
print '\033[;31m Empty file or specify is not a file!\033[0m'
# 批量解析IP地址或主机名
def batch_resolve(all_list):
all_list.sort();
for line in all_list:
if valid_ip(line) == 'True':
ip_to_host(line)
elif valid_ip(line) == 'False':
host_to_ip(line)
def main(argv):
# 输入参数检查
try:
if len(sys.argv[0]) == 1 or sys.argv[1] == "-h" or sys.argv[1] == "--help":
Usage()
except IndexError:
Usage()
argv_all = argv[1:]
argv_sum = len(argv[1:])
if argv_sum == 2:
argv = argv[1]
if argv == '-f':
load_file()
else:
batch_resolve(argv_all)
else:
batch_resolve(argv_all)
if __name__ == '__main__':
main(sys.argv)◎查看效果
anzhihe@theone-op:~$ hc Usage: hc [ip or hostname] [-f file] [-h] [--help] Convert Host Name to IP Address and vice versa created by anzhihe@chegva.com anzhihe@theone-op:~$ hc chegva-op-simulation00.bj01 10.89.32.63 chegva-op-index00.sh01 10.89.32.63 chegva-op-simulation00.bj01 100.90.146.39 anzhihe@theone-op:~$ hc -f tmp chegva-op-index00.sh01 10.89.32.63 chegva-op-index01.sh01 100.70.106.19 chegva-op-simulation00.bj01 100.90.146.39 chegva-op-simulation01.bj01 100.90.142.40 anzhihe@theone-op:~$ hc -f xx Empty file or specify is not a file! anzhihe@theone-op:~$ hc xx HOST : xx Not found anzhihe@theone-op:~$ hc 11 IP : 11 Not found