Q: Хочу оживить старый комп, поставив на него легковесный дистрибутив линукса. Единственное условие — возможность запустить браузер и относительно приятный внешний вид. Какой дистрибутив посоветуешь?

A: В твоем случае я бы устанавливал SliTaz. Во-первых, он действительно очень легкий — около 30 Мб, и это с графической оболочкой и минимальным набором софта. Кстати, в качестве графической оболочки используется LXDE, который, как по мне, выглядит вполне приятно (см. скрин). Насчет браузера, то в этих 30МБ уместилось аж три браузера: популярный на легковесных дистрибутивах Midori, ну очень минималистичный TazWeb и консольный Retawq. Репозиторий дистрибутива насчитывает больше чем 3300 пакетов.

SliTaz при первой загрузке
SliTaz при первой загрузке

Q: На моем бюджетном андроидофоне мне не хватает памяти для приложений. Link2SD для меня не вариант. Можно ли как-то еще высвободить хоть чуть-чуть места?

A: Можно попробовать воспользоваться компрессорами, которые разрабатывают крутые ребята из XDA. Например, GOptimize, на вход которому нужно скормить APK-файл, и он постарается максимально ужать его. При этом сжимаются графические файлы, файлы ресурсов, dex-файлы, удаляется разная ненужная информация. Еще одна утилита со схожими возможностями — Casini.

 

«БОЛЬШОЙ ВОПРОС»: Шифруется при использовании шифра!

Q: Мой провайдер блочит OpenVPN. Каким образом скрыть сам факт использования OpenVPN-туннеля?

A: Наиболее простой способ обнаружения и блокировки OpenVPN-трафика — мониторинг файрволом стандартных OpenVPN-портов и их блокировка. Чаще всего блокируются 1194-й UDP-порт. Бороться с такого рода блокировками несложно. Обычно помогает конфигурация OpenVPN на использование 443-го порта, зашифрованный трафик на котором не должен вызывать ни у кого никаких подозрений — на нем работает HTTPS. Да и кроме того, OpenVPN, как и HTTPS, использует SSL-шифрование, поэтому отличить HTTPS- и OpenVPN-трафик на 443-м порту очень сложно. Но к сожалению, SSL-шифрование в OpenVPN немного отличается от того, что используется в HTTPS, и поэтому крутые устройства DPI (Deep Packet Inspection) смогут обнаружить эту разницу. Предположим, у твоего провайдера имеется такое оборудование (что, конечно, очень маловероятно). Что делать в таком случае? В таком случае можно воспользоваться утилитой obfsproxy. Хотя и разрабатывается эта утилита командой Tor, она является независимым продуктом и легко конфигурируется для использования вместе с OpenVPN (подробнее здесь). Принцип действия последней утилиты заключается в оборачивании трафика в новый слой, например в обычные HTTP-пакеты. Таким образом, OpenVPN-трафик может спокойно пройти незамеченным мимо твоего провайдера (подробнее см. на схеме).

Но бывают устройства DPI покруче, которые могут обнаружить и такой обман. В таком случае можно, как ни странно это звучит, пропускать OpenVPN-трафик через SSL-туннель. Дополнительный слой шифрования не позволит никакому DPI добраться к OpenVPN-трафику и, соответственно, детектировать его. Для поднятия SSL-туннеля можно воспользоваться утилитой stunnel. Подробнее о настройке stunnel можно почитать здесь. Правда, у такого способа есть один минус — из-за дополнительного слоя шифрования скорость передачи снижается.

obfsproxy 

Q: Хочу открывать разные вкладки через разные прокси. Есть ли какие-нибудь расширения для любого из браузеров, позволяющие это?

A: Разные вкладки через разные прокси вряд ли получится. Но вот, например, для Firefox можно заюзать плагин FoxyProxy, который позволяет установить прокси для конкретного сайта, группы сайтов, а также для группы сайтов по маске. Аналогичными возможностями обладает расширение для Chrome Proxy Switchy.

Q: Можно ли каким-нибудь образом достать картинку из буфера обмена с помощью bat-файла?

A: Только возможностями bat-файла здесь не обойтись. Но можно использовать в этих целях всемогущий PowerShell, умеющий работать с Windows Forms:

Add-Type -AssemblyName System.Windows.Forms
([System.Windows.Forms.Clipboard]::GetImage()).Save("E:\image.png", [System.Drawing.Imaging.ImageFormat]::Png)

Но если все-таки важно, чтобы это был bat-файл, то единственным решением будет пустить в ход сторонние утилиты, как, например, NirCmd. Воспользоваться ею можно так:

nircmd.exe clipboard saveimage "E:\image.png"

Q: На работе приняты некие правила оформления кода. Большинство этих правил можно проверять и некоторые даже исправлять автоматически с помощью скрипта перед тем, как сделать коммит. Как лучше всего автоматизировать это дело?

A: Есть очень красивое решение, которое заключается в том, что на определенные события Git можно вешать свои скрипты (githooks). Как? На самом деле при вызове

git init

в директории .git создается также и папка hooks, в которой лежат примеры хуков. Чтобы «включить» их, надо просто переименовать файлы нужных хуков, убрав расширение sample, или просто создать файл с названием конкретного хука (список всех хуков можно посмотреть в man’е на githooks). Кстати, хотя и примеры хуков написаны на bash, никто не мешает нам пустить в ход, скажем, Python. Вот, например, скрипт, обрабатывающий хук post-commit и выводящий хеш последнего коммита, будет выглядеть примерно так:

#!/usr/bin/python3
import subprocess
print(subprocess.check_output(['git','rev-parse','HEAD']))

В твоем же случае удобно будет повесить твой скрипт, проверяющий оформление, например, на хук pre-commit, и в случае ошибок в оформлении завершить скрипт с ненулевым статусом (в таком случае коммит будет отменен).

Q: Случайно затер переменную окружения %PATH% — неправильно выполнил присвоение. Как мне теперь вернуть ее прежнее значение? Сижу на Windows 7.

A: Наверное, самым быстрым способом будет возврат из точки восстановления. Но часто в точке восстановления слишком много всего, а нужно лишь вернуть значение PATH. Это можно сделать благодаря системе истории файлов в Windows 7. Итак, для начала запускай regedit. Выбирай там ветку HKEY_USERS и дальше иди в меню File -> Load Hive. Иди в свою юзерскую папку и щелкай на файл NTUSER.DAT (он скрытый, так что, возможно, нужно включить отображение скрытых файлов). Но нажимай не на кнопку «Открыть», а на маленькую стрелочку на этой кнопке и в появившемся меню выбирай «Показать предыдущие версии». Выбирай версию, в которой PATH корректный (по дате можно посмотреть). Открой и дай какое-нибудь название, например Old. Дальше переходи в ветку Old\Environment и в одноименном ключе найдешь свою PATH (смотри скриншот). Можно также восстановиться назад, сохранить себе куда-нибудь значение переменной PATH, а потом восстановиться обратно вперед: значение переменной у нас уже сохранено — остается только установить его.

Просмотр переменной PATH через Regedit
Просмотр переменной PATH через Regedit

Q: Что-то очень непонятное. Дебагаю одно C#-приложение, работающее с сетями. Пропускаю трафик через Burp. У меня тестовый сервер на localhost’е и есть еще внешний. Так вот, когда работаю с внешним сервером — все ОK, а когда с localhost — Burp ничего не перехватывает. В чем дело?

A: Дело в том, что .NET захардкожен не посылать запросы на localhost или 127.0.0.1 через прокси. Но он вполне нормально пропускает трафик на 127.0.0.2 или на любое доменное имя, указывающее на 127.0.0.1. Поэтому самым быстрым решением проблемы будет добавление в файл hosts соответствующей записи, например:

127.0.0.1 mylocalhost

Пакеты без проблем пойдут на mylocalhost.

Q: Время на моих часах в Kubuntu постоянно сбрасывается на Гринвич после ребута и подключения к инету. Никак не пойму почему?

A: Скорее всего, проблема в пакете tzdata, который как раз отвечает за локальное время. Переконфигурирование пакета должно помочь. Для этого нужно выполнить

$ dpkg-reconfigure tzdata

и в появившемся окошке выбрать свою временную зону. Если после этого, часы все равно показывают неправильное время, то скорее всего нужно также настроить соответственную временную зону собственно в настройках виджета часов.

 

ОДНОЗНАЧНОГО ОТВЕТА НЕТ: Доверять ли опенсорсу?

Q. Если я установлю на свой девайс опенсорсный CyanogenMod, смогу ли я быть уверен, что меня никто не отслеживает и мои данные никто не видит?

  • A. Поскольку каждый может посмотреть исходные коды CyanogenMod, то шанс какого-нибудь бэкдора в нем минимален. Так что, при условии, что ты будешь устанавливать только опенсорсные проверенные приложения (а такие можно найти в каталоге F-Droid), можешь чувствовать себя в безопасности.
  • B. С другой стороны, шанс бэкдора хоть и ничтожен, но все-таки есть. Кроме того, CyanogenMod не полностью опенсорсный. Для некоторых девайсов в нем все же присутствуют проприетарные драйверы. Если хочешь полного опенсорса — посмотри в сторону проекта Replicant, который хоть и поддерживает меньше устройств, но зато полностью опенсорсный.

Q: Хочу подключится через один SSH-сервер к другому, но команда

$ ssh vasja@serverone.com 'ssh petja@anotherserver.com'

завершается неудачей. Что я делаю не так?

A: Дело в том, что когда ты подключаешься по SSH в режиме выполнения команды, на сервере по-умолчанию не создается TTY, который необходим для работы SSH. Но можно заставить SSH принудительно создавать TTY. Для этого существует ключ -t. Таким образом тебе нужно выполнить:

$ ssh -t vasja@serverone.com 'ssh petja@anotherserver.com'

или же просто последовательно подключатся к серверам.

Q: Можно ли как-нибудь в Android вывести текущую скорость закачки так, чтобы ее было видно поверх других приложений?

A: Ну проще всего и, наверно, удобнее всего вывести эту информацию в статусбар. Это очень легко сделать, если взять на вооружение небезызвестный фреймворк Xposed. Оказывается, как раз существует специальный Xposed-модуль для этого Network Speed Indicator. Устанавливается он за несколько секунд, и сразу после перезагрузки увидишь индикатор (см. скрин). Можно включить отображение индикатора только в случае какой-нибудь сетевой активности, а также указать единицы измерения трафика.

Индикатор скорости закачки в статусбаре
Индикатор скорости закачки в статусбаре

Q: Часто выполняю длительные процессы на удаленных машинах по SSH. Чтобы вся выполненная работа не была утрачена при обрыве соединения, использую Screen. Но иногда просто забываю о нем. Можно ли каким-нибудь образом запускать Screen автоматически?

A: Да, конечно. Наиболее очевидный способ сделать это описан в man’е Screen: нужно просто установить Screen в качестве дефолтного шелла в файле /etc/passwd. Такой способ довольно удобен, но есть некоторые загвоздки: например, траблы с алиасами в bash, невозможность передавать данные на сервер с помощью SCP или же невозможность запустить оболочку как оболочку регистрации пользователя в системе (то есть su - user). Именно поэтому лучшим способом будет добавить вот такой кусочек в файл ~/.bash_profile (запускается только при входе пользователя в систему):

if [[ ( -z "$STY" ) && ( ! -z "$SSH_CONNECTION" ) ]]
then   
    screen -S shell -x 2> /dev/null || screen -S shell
    logout
fi

Что делает этот скрипт? Условия в первой строке проверяют, не запущена ли уже сессия Screen, а также, SSH ли это соединение. В случае истинного результата пробуем подключиться к активной (not detached) сессии Screen (ключ -x). Только в том случае, если такой нет, подключаемся стандартным способом.

 

5 ШАГОВ: Обратная связь

Раздать интернет своему компьютеру или ноутбуку с Android-телефона сегодня, наверное, сможет даже ребенок. Но бывают ситуации, когда нужно сделать все с точностью до наоборот: расшарить «компьютерный инет» телефону. Первое, что приходит на ум, — создать Wi-Fi-точку. Но часто такой возможности нет. Почему? Например, на компьютере может попросту не быть Wi-Fi-адаптера или же он не поддерживает создание точек. Что ж, тогда пустим в ход USB-кабель: настроим так называемый USB Reverse Tethering. Рассмотрим мультиплатформенный способ сделать это без установки дополнительного ПО.

  1. Итак, для начала разберемся, что нам нужно для настройки. Во-первых, тебе нужен телефон на Android, который поддерживает USB-модем (проверить и включить можно, перейдя в «Настройки -> Беспроводные сети -> Модем и точка доступа -> USB-модем»). Кроме этого, нужны рут-права на телефоне, без них никак. Кроме рута, нужно установить еще и Terminal Emulator, ибо на adb-shell надеяться нельзя — в режиме USB-модема ADB не работает. Но набрать нам будет нужно всего-то две команды, так что это не беда. Ну и конечно, нужен компьютер с интернет-соединением и USB-кабель.
  2. Если все условия выполнены, приступим к активным действиям. Подключи телефон USB-кабелем к компьютеру и включи режим USB-модема. Если у тебя Linux, то переходи сразу к третьему шагу — Network manager поднимет соединение с только что обнаруженным сетевым адаптером. Если же у тебя винда, то можешь положиться на Windows Update, который должен бы найти и установить нужный для тебя драйвер, но можешь и установить вручную: открой окно ручного выбора драйвера и перейди в нем на вкладку «Сетевые адаптеры». В драйверах от Microsoft найди Remote NDIS Compatible Device и установи его.
  3. Дальше настроим шаринг инета с компа. Для Linux: в настройках Wired-соединение (соединения с телефоном) на вкладке IPv4 выбери в выпадающем списке Method пункт Shared to other computers. Для Windows: иди в центр сетей и общего доступа, нажимай «Изменить настройки адаптера», дальше открывай свойства адаптера, через который инет (например, LAN Ehternet). Переключайся на вкладку «Доступ» и устанавливай там флажок «Разрешить другим пользователям сети использовать подключение к интернету данного компьютера», после чего выбери из выпадающего списка ниже адаптер USB-соединения.
  4. Теперь перейдем непосредственно к конфигурации телефона. Открывай Terminal emulator и получай root:
    $ su
    

    Дальше выполняй:

    # netcfg usb0 dhcp
    

    (usb0 — название USB-интерфейса. Иногда бывает rndis0).

    Все. Можешь закрывать терминал и запускать браузер. Но может случиться, что инета все еще не будет. Тогда вернись в терминал и вбей:

    route add default gw 10.42.0.1 dev usb0
    

    где 10.42.0.1 — адрес компьютера (это по умолчанию для Linux, для Windows тут нужно указать 192.168.137.1 или 192.168.0.1 для XP).

  5. Скорее всего, найдутся приложения, которые не захотят работать через такое соединение (в Play Маркете, например, навигация работает, а вот загрузка приложений — нет). В таком случае можно применить один трюк, он, конечно, не на всех аппаратах будет работать, но попробовать стоит. Включи на телефоне временно пакетные данные (3G). И вбей в терминале:
    # ifconfig rmnet0 0.0.0.0
    

    (где rnmet0 — название 3G-интерфейса). Если тебе неохота проделывать столько телодвижений — посмотри на эту утилиту (работает только под Windows).

Q: Имеется куча Windows-ноутбуков. Нужно на все ввести пароль для Wi-Fi. Ручками это делать не хочется. Вопрос: как из консоли установить пароль от Wi-Fi-точки?

A: Начиная с Windows Vista, это можно сделать с помощью импорта/экспорта так называемых Wi-Fi-профилей. Вводи необходимые настройки на одном из ноутов. Теперь ты можешь экспортнуть эти настройки так:

netsh wlan export profile folder=c:\tmp\wifi

После выполнения команды в c:\tmp\wifi будет лежать по одному XML-файлу на каждую точку, для которой ты установил пароль. Импорт осуществляется такой командой:

netsh wlan add profile filename=path\to\file.xml

 

Теги:


Оставить мнение