Мне нужно проверить производительность веб-сайта через различные веб-прокси из своего ящика Fedora 19, и я хочу сделать это, установив локальное разрешаемое имя «прокси» для разрешенных имен 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
кажется наиболее логичным местом для такого изменения разрешения имен в масштабе всей системы.
/ etc / hosts только сопоставляет имена с IP-адресами. Нельзя указывать имя на другое имя.
Вы все еще можете использовать / etc / hosts, но вам нужно будет создать сценарий для разрешения имени на IP и изменения / etc / hosts с этим IP-адресом или выполнить работу заранее, создав несколько файлов hosts и ваш сценарий просто переместится файл на место для каждого прокси в нужный момент проверки.
Вот сценарий 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()
Этого нельзя сделать. Лучшее решение сделать то, что я хочу, - это установить преобразователь имен (привязать, поименованный) и обновить его локальные таблицы с помощью FQDN прокси.