Python脚本批量解析主机名和IP地址

  • 生产实践

    用于中控机上批量解析主机名和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
anzhihe安志合个人博客,版权所有丨 如未注明,均为原创 丨转载请注明转自:https://chegva.com/3792.html | ☆★★每天进步一点点,加油!★★☆

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注