/etc/hosts에서 이름으로 이름 확인

/etc/hosts에서 이름으로 이름 확인

내 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보다 빨라지기 때문입니다.)

이 작업을 수행하려면 어떻게 해야 합니까? env 변수를 변경하는 스크립트 작성을 고려했지만 http_proxy이 방법을 사용하면 모든 로그인 변수를 함께 정렬하기 위해 모든 프로세스에 추가 단계를 추가해야 합니다. 한 번에 바꾸고 싶어요. /etc/hosts이와 같이 시스템 전체의 이름 확인을 변경하는 것이 가장 논리적인 장소인 것 같습니다.

답변1

/etc/hosts는 이름을 IP 주소에만 매핑합니다. 이름을 다른 이름으로 가리킬 수 없습니다.

/etc/hosts를 계속 사용할 수 있지만 이름을 IP로 확인하고 해당 IP로 /etc/hosts를 수정하는 스크립트를 작성하거나 미리 작업을 수행하여 여러 개의 호스트 파일을 만들고 스크립트를 간단히 이동하도록 해야 합니다. 확인의 적절한 지점에서 각 프록시에 대한 파일을 제자리에 배치합니다.

답변2

이것은 할 수 없습니다. 내가 원하는 작업을 수행하는 가장 좋은 솔루션은 이름 확인자(바인드, 이름 지정)를 설치하고 해당 로컬 테이블을 프록시의 FQDN으로 업데이트하는 것입니다.

답변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()

관련 정보