Задать вопрос
  • DigitalOcean: как до привязки домена вызывать не default.domain сайты?

    @throughtheether
    human after all
    Может есть какой другой способ проверить работу на DO без привязки доменного имени?
    Попробуйте прописать у себя на рабочей станции в файле hosts отображение 11.22.33.44 yourdomain.com,
    где 11.22.33.44 - IPv4-адрес вашего сервера, yourdomain.com - добавленное вами доменное имя.
    Ответ написан
    1 комментарий
  • Lenovo Thinkpad x230 на гарантии - выкинуть или можно что-то сделать?

    @throughtheether
    human after all
    Вопрос - как лучше поступить в такой ситуации?
    Поднять бурление в соцсетях/медиа. Думаю, при определенном градусе накала представитель Lenovo к вам сам обратится.
    Ответ написан
  • Будут ли иметь клиенты с ipv4 доступ к моему серверу, если у сервера ipv6?

    @throughtheether
    human after all
    Имеется сервер мощный, но к нему ведется только один белый ipv4 адрес, идея поднять на нем виртаульные машины с белыми ipv6.
    Если вам надо запустить несколько серверов и организовать доступ к каждому, то проще, на мой взгляд, докупить IPv4-адресов (если хостер предоставляет такую услугу) и настроить для виртуальных серверов бриджинг (лучше) или NAT (костыльнее).

    Если все же хочется поэкспериментировать с IPv6, то
    Вот, собственно, и вопрос, если на одной из таких машин будет стоять сайт, будут ли иметь к нему доступ клиенты у которых только ipv4 адрес?
    Думаю, нет. Чтобы IPv4-клиенты имели доступ к вашему IPv6-серверу, им (клиентам) будет необходимо воспользоваться неким IPv6-over-IPv4 решением, например, Teredo (в отличие от 6to4, Teredo инкапсулирует данные в UDP-датаграммы, тем самым упрощая взаимодействие с NAT, наличие которого у клиента вполне вероятно).

    И как я смогу проверить коннект к такому виртуальному серверу, например, зайти по ssh, если у меня самого ipv4?
    Так же, как и потенциальный клиент. Поднять соответствующий интерфейс (teredo), установить SSH-соединение, указав IPv6-адрес сервера.

    В этом комментарии я предполагал, что у вашего хостера есть IPv6-связность (т.е. он анонсирует в интернет свои IPv6-префиксы). Если предположение неверно, то и на сервере придется использовать некое IPv6-over-IPv4 решение.
    Ответ написан
    Комментировать
  • Как автоматически построить топологию сети имея CAP файлы?

    @throughtheether
    human after all
    Во-первых, хорошо было бы узнать, откуда задача возникла, и какой смысл в ее решении (т.е. что вам даст/должно дать знание топологии). Трафик снимается из одной точки сети или из нескольких? Пример дампа можете привести?

    Я предполагаю, что в сети используется IPv4, инкапсулированный в Ethernet. В таком случае, на мой взгляд, сначала имеет смысл построить граф взаимодействия Ethernet-хостов (аналог в wireshark: statistics -> conversations -> ethernet). Затем, для каждого ethernet-хоста (определяемого unicast MAC-адресом) ставите в соответствие IPv4-адрес инкапсулированного IPv4-пакета (MAC-адресу источника ставите в соответствие IPv4-адрес источника, аналогично с адресами назначения). У вас получается вид топологии сети из точки, в которой происходил захват трафика. На мой взгляд, если нужна топология всей сети, то и трафик захватывать надо с каждого L2-домена.
    Ответ написан
    Комментировать
  • Как победить зависание сессии посетителя при выполнении ping средствами PHP?

    @throughtheether
    human after all
    Выполняет пинг определённого адреса средствами exec
    Например:
    exec("ping 192.168.0.1 -n 1 -w 350", $output, $status);
    Команда для разных ОС одинаковая? Насколько мне известно, единичные значения параметра -w в windows и linux различны (миллисекунда и секунда соответственно).
    Какие есть мысли - что можно предпринять?
    Если команда одна и та же для разных ОС, то значение таймаута для linux-варианта предлагаю скорректировать.
    Ответ написан
    Комментировать
  • Ubuntu dhcp-server как запретить присвоение чужого ip?

    @throughtheether
    human after all
    Включаем комп, которому принадлежит этот адрес - у него нет интернета.
    Как исправить такое?
    IP source guard (основная функциональность) + DHCP Snooping (таблица соответствий адресов), все это на коммутаторе.
    Ответ написан
    Комментировать
  • Работа с анаграммами, как можно оптимизировать скрипт?

    @throughtheether
    human after all
    Функция возвращающая список анаграмм из заданного слова
    Рекомендую присмотреться к модулю itertools, в частности, функции permutations. Примерный код:
    import itertools
    def anagrams(word):
    	for permutation in itertools.permutations(word):
    		yield ''.join(permutation)
    
    for word in anagrams('car'):
        print(word)
    car
    cra
    acr
    arc
    rca
    rac

    В случае повторения букв в слове анаграммы тоже будут содержать дубли:
    >>> for word in anagrams('rar'):
    	print word
    rar
    rra
    arr
    arr
    rra
    rar

    Функция сравнивающая два списка и возвращающая совпадения
    Если я правильно понял, вы держите в памяти списки анаграмм и словарных слов и ищете (линейным поиском) их пересечение. Это, на мой взгляд, не вполне эффективно. Я бы поступил так:
    words=['car','arc','cat','map','toster']
    wordset=set(words)
    for word in anagrams('car'):
       if word in wordset:
            print ("word %s matched vocabulary" % word)

    Если и этого не хватит, то можно будет, на мой взгляд, подумать об использовании фильтров Блума.
    UPD: Как я понял, основная проблема в количестве анаграмм.
    Вводим слово
    Из введённого слова делаем анаграммы
    Вы можете с самого начала для каждого слова из словаря запомнить его 'отсортированный' вариант:
    words=['car','arc','cat','map','toster']
    sortedwordset=set(''.join(sorted(w)) for w in words)
    >>> sortedwordset
    set(['acr', 'eorstt', 'amp', 'act'])
    Тогда для каждого введенного слова можно проверить, имеет ли смысл составлять анаграммы:
    if ''.join(sorted(word)) in sortedwordset:
        #continue with anagrams

    UPD2: Можно, на мой взгляд, сделать так: для каждого слова из словаря формируется его 'отсортированная' форма. Эта форма будет ключом словаря, а значением - список словарных слов, являющихся анаграммами этой формы. Тогда за счет предварительных вычислений можно будет быстро искать словарные анаграммы:
    def sorted_string(s):
    	return ''.join(sorted(s))
    
    words=['car','arc','cat','map','toster']
    d={}
    for word in words:
    	sorted_word=sorted_string(word)
    	if sorted_word in d:
    		d[sorted_word].append(word)
    	else:
    	    d[sorted_word]=[word]
    >>> d
    {'acr': ['car', 'arc'], 'eorstt': ['toster'], 'amp': ['map'], 'act': ['cat']}
    >>> d.get(sorted_string('car'),[])
    ['car', 'arc']
    >>> d.get(sorted_string('cat'),[])
    ['cat']
    >>> d.get(sorted_string('perkele'),[])
    []
    Ответ написан
  • Как сохранить форматирование текста при записи в файл?

    @throughtheether
    human after all
    for line in f:
        read = f.readline()
        split = read.split()

    Если я правильно понял, то строки пропускаются здесь. Вы итерируете по строкам файла (for line in f) и зачем-то каждый раз в цикле считываете новую строку (f.realine()), пропуская текущую. Python 2.7, например, в таком случае порождает исключение (ValueError: Mixing iteration and read methods would lose data).

    Я бы на вашем месте исправил на:
    for line in f:
        split = line.split()
    Ответ написан
  • Как правильно настроить snmp trap mac-notification на cisco 2960 ?

    @throughtheether
    human after all
    Дело оказалось в том,что в одном трапе само устройство может передать несколько состояний mac-notification в объекте cmnHistMacChangedMsg.

    Если я правильно понял, то так и должно быть. Цитата Cisco SNMP object navigator:
    This object contains the information of a MAC change notification event. It consists of several tuples packed together in the format of '...'.
    several tuples
    several
    Полагаю, проблема в разборе (парсинге) сообщения.
    Ответ написан
    Комментировать
  • Как найти совпадение в списке python?

    @throughtheether
    human after all
    Нужно выделить все подсписки, которые подходят под [1,2,*] без перебора списка.
    Если вы хотите выбрать все элементы первого уровня вложенности ("подсписки"), удовлетворяющие условию, без рассмотрения каждого из них (без перебора), то никак. В случае, если список a большой, вы можете рассматривать каждый элемент при добавлении его в список a и, в случае выполнения условия, добавлять его (или его индекс) в другой список/множество, хранящий/хранящее совпадения. Общая "сложность" будет такой же, но она, при соответствующей организации кода, будет "размазана" во времени, что иногда может быть предпочтительно. Но в таком случае паттерн должен быть известен заранее.
    Ответ написан
    Комментировать
  • Python работа с Excel. как установить xlutils?

    @throughtheether
    human after all
    Если возможно подскажите похожие плагины для работы с xl в Python 3.4

    openpyxl
    Ответ написан
    Комментировать
  • Как спарсить значение src из html кода?

    @throughtheether
    human after all
    При помощи selenium:
    from selenium import webdriver
    url='https://vk.com/kostya__wolf?z=photo107790602_343297825%2Falbum107790602_00%2Frev'
    xpath='//a[@id="pv_open_original"]'
    browser = webdriver.Firefox()
    browser.get(url)
    print browser.find_element_by_xpath(xpath).get_attribute('href')
    browser.quit()

    При помощи requests и lxml:
    import requests
    import json
    import lxml.html
    
    url='https://vk.com/kostya__wolf?z=photo107790602_343297825%2Falbum107790602_00'
    r=requests.get(url)
    doc=lxml.html.fromstring(r.text)
    search_string=url[url.find('photo'):url.find('%2F')]
    xpath='//a[contains(@href, "%s")]' % search_string
    src=doc.xpath(xpath)[0].get('onclick')
    d = json.loads(src[src.find('{'):src.find('}}')+len('}}')])
    src=d['temp']['base']+d['temp']['z_'][0]+'.jpg'
    print src
    Ответ написан
    Комментировать
  • Что неправильно в коде?

    @throughtheether
    human after all
    Что этот код, по-вашему, должен делать? А что он по факту делает (т.е. что не нравится)?
    UPD:
    Ошибки кода:
    g.go('...') имя переменной g не объявлено, добавьте перед этой строкой g=grab.Grab()
    u = urllib.urlopen(src) имя переменной src не объявлено.
    Другие ошибки: xpath, скорее всего, неверный. То, что вы скопировали его из firebug/firepath, не гарантирует, что grab сможет его обработать. Скорее всего, браузер и grab видят немного разную страницу, это связано с обработкой javascript. Кроме того, мне (grab 0.4.13, pyton 2.7, windows 7) grab ругался, что метод xpath() более не поддерживается (deprecated).
    UPD2:
    рабочий код с использованием grab:
    import urllib
    import grab
    import json
    
    g=grab.Grab()
    url='https://vk.com/kostya__wolf?z=photo107790602_343297825%2Falbum107790602_00'
    search_string=url[url.find('photo'):url.find('%2F')]
    xpath='//a[contains(@href, "%s")]' % search_string
    g.go(url)
    src=g.doc.select(xpath).attr('onclick')
    d = json.loads(src[src.find('{'):src.find('}}')+len('}}')])
    src=d['temp']['base']+d['temp']['z_'][0]+'.jpg'
    urllib.urlretrieve(src,'bibit.jpg')
    Ответ написан
  • Как сделать доступ к сайту только с ip из России?

    @throughtheether
    human after all
    На мой взгляд, сразу стоит полагать, что отображение IPv4-префиксов на географические характеристики (страны) - вещь не самая прямолинейная. Думаю, в дальнейшем все чаще будет наблюдаться перепродажа (аренда) префиксов, приводящая к изменению этого отображения, это следует учитывать.

    Технически, я вижу следующие возможности:
    1) ACL на сетевом оборудовании. Составляете список "российских" префиксов, транслируете в ACL, навешиваете на необходимый интерфейс. Плюсы: line-rate (или близкая к line-rate) производительность. Минусы: не всякое оборудование подойдет (размер TCAM и т.д.), возможные исключения (клиент жалуется, что он из России, а сайт не открывается) придется прописывать в ACL каждый раз (может быть не очень удобно). Стоит применять, если объем нежелательного трафика велик (флуд и прочая) и этот трафик реально влияет на производительность вашего сервера.
    2) фильтрация на самом веб-сервере (модуль geoIP). Плюсы: больше гибкости. Минусы: производительность ограничена производительностью geoIP-базы.
    3) комбинация пп. 1) и 2). Грубая фильтрация при помощи ACL, более гибкая - на самом веб-сервере.
    4) самый простой - спрятаться за CDN-фронтэнд, предоставляющий подобную услугу.
    Есть конечно более специфичные варианты, но вам, думаю, хватит и этих (а точнее, второго или четвертого).
    Ответ написан
    Комментировать
  • Как создать LAN видеоресурс?

    @throughtheether
    human after all
    Каким образом можно создать аналогичный ресурс?
    Если надо только показывать видео (без загрузки его на сервер, учета статистики, рекомендаций и прочего), то можно все сделать на коленке:
    1) качаете видео
    2) верстаете html-страничку с использованием тега video
    3) раздаете все каким-либо веб-сервером
    4) просите администраторов сети, чтобы какой-либо хостнейм (funny-video.lan, например) разрешался в ваш IP-адрес
    5) ???
    6) профит! - люди смотрят смешное видео (без регистрации и смс), не тратя деньги на внешний трафик.

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

    Если нужен функциональный клон youtube, поищите по ключевым словам "video sharing script", "video sharing cms" и прочая.
    В любом случае, вам потребуются:
    1) сервер в локальной сети, на котором все будет работать
    2) соответствующая DNS-запись
    3) запущенный веб-сервер, раздающий видео тем или иным образом (статика, стриминг)
    скриншоты
    985d1f8d4ea248f18dc641da939c9474.png879ef863f5704ab19ff3be65b65865c1.png
    Ответ написан
  • Какие книги посоветуете по безопасности сетей?

    @throughtheether
    human after all
    Вообще говоря, вопрос довольно общий, если вы его уточните (что и с какой целью вам необходимо изучить), будет проще ответить.
    По поводу безопасности, на мой взгляд, сначала следует изучить устройство самих сетей/протоколов, и лишь затем, как производную от этого, аспекты безопасности.
    Пара универсальных рекомендаций:
    1) Wendell Odom. Книги курса CCNA.
    2) Jeff Doyle. Routing TCP/IP. (хотя бы первые главы четыре тома I)
    3) Stevens. TCP/IP Illustrated, том I. В томе II рассказывается, в том числе и о программировании (имплементации) протоколов.
    4) Pearlman. Interconnections.
    Если опыта немного, то лучше прочесть меньше книг (рекомендую пп. 1,2), но провести больше практических работ.
    Ответ написан
    Комментировать
  • Что делает скприпт livestreamer-completion / twitch_channels.py?

    @throughtheether
    human after all
    Там же написано, составляет список каналов, на которые подписан пользователь, с целью использования для автодополнения команд в bash. Это реализовано путем составления запросов к API twitch.tv и обработки json-ответов. Или у вас есть более конкретные вопросы?
    Ответ написан
    Комментировать
  • Как парсить html страницы и его обрабатывать?

    @throughtheether
    human after all
    Держите отвратительный, кривой, но работающий код на python:
    from selenium import webdriver
    import time
    browser = webdriver.Firefox()
    url='http://vk.com/go_in_zp?z=photo-50824015_344878304%2Falbum-50824015_00%2Frev'
    browser.get(url)
    time.sleep(5) # this is bad
    img=browser.find_element_by_xpath('//a[@id="pv_photo"]/img')
    print img.get_attribute('src')
    browser.quit()

    вывод:
    http://cs624016.vk.me/v624016533/a226/owG51bJm59o.jpg

    Как этот код можно изменить:
    1) строку time.sleep(5) заменить на проверку нахождения элемента (ждем секунду, проверяем наличие элемента, если его нет, увеличиваем счетчик и продолжаем; при достижении счетчиком максимального значения - таймаут)
    2) заменить selenium на phantom.js (чтобы окно фаерфокса не появлялось)
    3) понять, что происходит при загрузке страницы браузером и имитировать это поведение при помощи requests.
    Третий путь, на мой взгляд, самый трудозатратный и самый многообещающий (в смысле скорости решения).

    UPD:
    решение при помощи requests:
    import requests
    from lxml.html import fromstring
    url='http://vk.com/go_in_zp?z=photo-50824015_344878304%2Falbum-50824015_00%2Frev'
    search_string=url[url.find('photo-')+len('photo-'):url.find('%2F')]
    r=requests.get(url)
    doc=fromstring(r.text)
    xpath='//a[contains(@onclick, "%s")]/img' % search_string
    print doc.xpath(xpath)[0].attrib['src']
    Ответ написан
    2 комментария
  • Как организовать маршрутизацию или 2 маршрута для одной сети?

    @throughtheether
    human after all
    Падение линка не падение интерфейса. Подскажите как можно выкрутиться не прибегая к протоколам BGP.
    Или самому организовывать добавление/удаление маршрутов в зависимости от "доступности" (ping и прочая) противоположного конца тоннеля, или использовать динамическую маршрутизацию через туннельные интерфейсы (реализации RIPv2, если не ошибаюсь, есть почти под каждую из популярных ОС).

    Точнее можно будет ответить после того, как вы предоставите схему организации сети.
    UPD:
    Очень краткая схема в первом комментарии выше.
    Если я правильно понял, то можно (нужно?) изменять маршрут по умолчанию (т.е. маршрутизировать трафик на OPENVPNSERVER1 или OPENVPNSERVER2) на 3750 в зависимости от работоспособности тоннеля?
    Когда трава была зеленее я видел использованиe route map в зависимости от пинга, но не запомнил и информации сейчас нет.
    На мой взгляд, вам подойдет решение в виде статической маршрутизации вкупе с ip sla tracking. См. раздел Резервирование.
    UPD2:
    К сожалению со второй стороны также нужно отправлять пакеты, в свою очередь выбирая интерфейс. А там у нас чисто линуксовое решение.
    Я полагал, что хотя бы с одной стороны маршруты исчезают при нарушении работоспособности туннеля. Если нет, то остается RIPv2 (на 3 серверах с openvpn и на устройстве cisco).
    Ответ написан