WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Советы » Определение имени хоста

Определение имени хоста


Дата публикации: 15-04-2008

Если в httpd.conf включено определение имен хостов (HostNameLookups on), в лог записываются не ip адреса клиентов, а имена хостов. Включать определение имен хостов не рекомендуется, так как ухудшает производительность веб-сервера. Гораздо лучше определять имена хостов клиентов (если это требуется для анализа) при обработке логов.

Для определения имени хоста по ip адресу модуле socket есть функция gethostbyaddr(). Она возвращает кортеж, состоящий из основного имени хоста, списка дополнительных имен и списка дополнительных ip адресов.

 

 

 

Для установки пассивного или активного телекоммуникационного оборудования обычно используют шкаф телекоммуникационный напольный. Обычно он используется для создания узлов коммуникации в офисах. Также его используют провайдеры для создания домовых сетей. При покупке у вас должен быть: выбор размеров, простота установки и разбора, возможность объединения нескольких шкафов, наличие перфорации для установления вентиляции, наличие мелких принадлежностей (кабеля, блоки, полки, панели и.т.п.).

 

 

 

>>>> import socket
>>>> host = socket.gethostbyaddr('194.109.137.226')
>>>> host
('fang.python.org', [], ['194.109.137.226'])

Если узнать имя хоста не удалось, возбуждается исключение:

 

>>>> socket.gethostbyaddr('172.16.0.1')
Traceback (most recent call last):
..File "<stdin>", line 1, in ?
socket.herror: (11004, 'host not found')
>>>> 

Так как в логе обычно присутствует не один запрос с данного ip адреса, нет смысла каждый раз определять имя хоста с помощью вызова функции gethostbyaddr(). Можно заполнять словарь определенными соответствиями и сначала пробовать искать в нем, а уже потом вызывать функцию. А так как имена хостов меняются редко, можно завести текстовый файл (или базу данных) и хранить информацию в нем. Тогда имена хостов, определенные во время сессии, используются в последующих сессиях, что сильно уменьшает время обработки. Неудачные попытки определения имени также имеет смысл записывать в словарь, чтобы во время текущей сессии больше не пытаться распознать данный адрес. Суммируя все выше сказанное, приведем фрагмент скрипта для определения имени хоста:


import socket

dns = {}
bad_ip = {}

# открываем файл с именами хостов для добавления
names = open('names.txt', 'a+')

# заполняем словарь уже известными именами
for i in names.readlines():
    dns[i.split()[0]] = i.split()[1]

if dns.has_key(ip):
    # если адрес присутствует в словаре, присваиваем найденное имя
    host = dns[ip]
elif bad_ip.has_key(ip):
    # если ранее не удалось определить имя - используем ip
    host = bad_ip[ip]
else:
    try:
        # пытаемся определить имя
        host = socket.gethostbyaddr(ip)[0]
        # записываем его в словарь и в файл
        dns[ip] = host
        names.write('%s %s\n' % (ip, host))
    except:
        # определить имя не удалось - используем ip
        # и записываем его в словарь неопределяемых ip адресов
        host = ip
        bad_ip[ip] = ip

Примечание: словарь "неопределяемых" адресов ведется только в течении сессии и в файл не записывается (а вдруг в следующий раз повезет?). Если имя определить не удалось, в качестве имени берется ip адрес.

Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Вэйни Дьер:

"Кого вы обвиняете, тому вы даете власть."

Опрос

Какой аудио плеер Вы используете?

Winamp
Light Alloy
foobar2000
Apollo
AIMP
1by1
iTunes
jetAudio
Другой...