разрешение имени по имени в /etc/hosts

разрешение имени по имени в /etc/hosts

Мне нужно проверить производительность веб-сайта через различные веб-прокси с моего ящика Fedora 19, и я хочу сделать это, установив локальное разрешаемое имя "proxy" для разрешенных DNS имен для наших прокси в моем /etc/hostsфайле. Итак, содержимое /etc/hostsфайла должно выглядеть примерно так:

proxy.us.company.com    proxy
#proxy.eu.company.com    proxy
#proxy.sa.company.com    proxy

Затем, когда мне нужно будет протестировать другой прокси, я могу просто отредактировать файл /etc/hostsи раскомментировать другое DNS-имя прокси, и все мои логины (и все остальные, использующие мою машину) будут проверяться по новому прокси. И большинство из указанных выше DNS-имен являются циклическими записями, что также нормально и необходимо для моего тестирования. (По правде говоря, мне это также нужно для реальной работы, потому что время от времени proxy.us зависает, и один из других прокси оказывается быстрее proxy.us.)

Как мне это сделать? Я думал написать скрипт для изменения http_proxyпеременной env, но с этим методом мне нужно будет добавить дополнительный шаг в каждый процесс, чтобы выровнять все переменные моих логинов вместе. Я хочу изменить это только в одном месте. /etc/hostsкажется наиболее логичным местом для внесения изменения разрешения имен в масштабах всей системы, как это.

решение1

/etc/hosts сопоставляет только имена с IP-адресами. Вы не можете связать имя с другим именем.

Вы по-прежнему можете использовать /etc/hosts, но вам придется написать скрипт, преобразующий имя в IP-адрес и изменить /etc/hosts с этим IP-адресом, или сделать эту работу заранее, создав несколько файлов хостов и попросив ваш скрипт просто переместить файл в нужное место для каждого прокси-сервера в нужной точке проверки.

решение2

Этого сделать нельзя. Лучшим решением для того, что я хочу, будет установить преобразователь имен (bind, named) и обновить его локальные таблицы с использованием полных доменных имен прокси-серверов.

решение3

Вот скрипт на Python, который делает то, что вам нужно:

#!/usr/bin/env python
from dns.resolver import Resolver
from re import sub
hostsfile='/etc/hosts'
proxies = [
    'proxy.us.company.com',
    'proxy.eu.company.com',
    'proxy.sa.company.com'
]
name = 'proxy'

def main():
    proxy = menu('Select proxy:', proxies)
    ip = Resolver().query(proxy,'A')[0].to_text()
    if len(ip):
        with open(hostsfile, 'r') as h:
            hosts = h.read()
        with open(hostsfile, 'w+') as h:
            hosts = sub('((\n|(?<!\n)\.)(1?\d?\d|2[0-4]\d|25[0-5])){4} +'+name+'(?= *\n)', '\n'+ip+' '+name, hosts)
            h.write(hosts)

def getInt(question, min, max):
    min,max = [int(max),int(min)] if min>max else [int(min),int(max)]
    while True:
        try:
            answer = int(raw_input('{0}: '.format(question)))
            if min <= answer <= max:
                return answer
            print('Must be a number from {0} to {1}'.format(min,max))
        except ValueError:
            print('Not a valid number')

def menu(title, items, index=False):
    print(title)
    for i, item in enumerate(items):
        print('{0}. {1}'.format(i+1, item))
    answer = getInt('', 1, len(items)) - 1
    return answer if index else items[answer]

main()

Связанный контент