среда, 12 ноября 2014 г.

DrWeb 10.0 Security Suite. Новая версия.

Зима ... крестьянин торжествуя, на дровнях обновляет путь ... неся гармонию, защиту, эру backup'а и ... Гм, о чем это я? Как-то совсем незаметно для меня прошел новый релиз нового антивирусного продукта от DrWeb - DrWeb 10.0. Как раз сейчас в момент написания этих строк "девятка" на моем ноутбуке обновляется на последнюю версию. Можно долго теоретизировать о преимуществе того или иного антивируса, приводить тройки лидеров, а-ля KAV, DrWeb, ESET NOD32 ... или же высказывать аргументы в пользу некоммерческих программных продуктов или условно-бесплатных. Или же вообще занять позицию ярого "виндоненавистника". Речь пойдет немного не об этом. Мне как давнему поклоннику данного продукта объективно интересно, чем же лично для меня будет полезна новая версия? Будет ли она работать быстрее на том же железе, и появятся ли какие-то доп. функции.

Собственно до начала установки я ознакомился с "пресс-релизом" на официальном сайте - Новая версия Dr.Web 10.0 для Windows, что рекомендую сделать и вам, для получения самого общего представления. Из явно-заметных тенденций - минимизация интерфейса. Т.е. все настройки для "продвинутых пользователей" убираются "с глаз долой", на виду находятся только самые необходимые и понятные неискушенному пользователю функции. Все AV-продукты постепенно так или иначе стараются стать "ближе к народу", т.е. "домохозяйко-ориентированными". Где-то даже в этом есть смысл (однако, когда я не смог произвести тонкую настройку модуля Spider Gate в 9-тке, нужно было всего-лишь добавить пару сайтов в белый список - и вроде из интерфейса это делается интуитивно понятно ... только вот желаемого эффекта я смог добиться лишь полностью отключив модуль Spider Gate), однако, когда ты пытаешься понять куда же упрятано то что нужн, и как оно на самом деле работает - становится как-то тоскливо.  Верхом совершенства в минимализме - будет наверное одна большая красная кнопка "Устранить угрозы безопасности", которая изредка будет изменяться на желтую "Необходимо продлить лицензию" ))

Также, из плюсов можно отметить появление функции защиты от потери данных, т.е. фактически антивирус теперь имеет функции агента резервного копирования. С учетом последних тенденций - это, пожалуй, является актуальным, т.к. количество различных троянцев шифровальщиков, приходящих неискушенным пользователям с "письмами счастья" от налоговой (якобы) и т.п. служб, в последнее время резко увеличилось. Только вот здесь не учтено одно простое свойство (или привычка) - лень, т.к. мало кто будет настраивать backup важных данных в антивирусе. Т.к. если вдуматься, то кто мешал автоматизировать процесс создания резервных копий критически важных данных без антивируса? С помошью банального архиватора и, например, использования каких-либо облачных сервисов? Правильно, никто. Но так или иначе - наличие подобной функции это только плюс.

К слову, что мне нравилось, правда у другого антивирусного вендора - это поддержка HIPS (Host-based Intrusion Prevention System), реализованная у ESET. Хочется - запретил запись любой гадости в автозагрузку, указав соответствующие папки, ветки реестра и другие "тонкие настройки" - и превентивный уровень защиты от неизвестных вредоносов обеспечен. Ни один WinLocker не сумеет закрепиться в системе. Однако, для такой "тонкой настройки" все же требуются определенные знания, "домохозяйка" их сделать определенно не сможет. А вот отсутствие подобных возможностей (именно тонкой настройки продукта продвинутыми пользователями) в большинстве современных версий антивирусных продуктов немного удручает. Мне не нужно чтобы антивирус мигал "зеленым глазом" и писал что все хорошо, я должен понимать как и за счет чего мне хорошо )) И при желании мог сделать чуть лучше ) Ну да я отвлекся.

Сразу после запуска установщика антивирус определил что у меня установлен DrWeb 9.0 и предложил обновить версию, уведомив при этом, что компьютер будет перезагружен. В процессе работы установщика имеется возможность сохранить файлы в карантине,  защищаемые объекты, а также пользовательские настройки продукта. Обновление прошло на удивление быстро (если сравнивать процесс с обновлением версии KAV 14.0 на KAV 15.0 на идентичном железе) и после перезагрузки я имел счастье лицезреть "единый командный центр DrWeb" в мини-агенте.

Естественно первое что я попробовал сделать - это проверить функцию белого списка в модуле Spider Gate, т.е. добавил сайт, который "девятка" определяла как нежелательный (даже при условии что он был внесен в исключения) - в список исключений. Все заработало с первого раза, т.е. применение настроек произошло мгновенно.

Интерфейс антивируса также претерпел изменения. Теперь меню настроек в административном режиме больше приближено к Metro интерфейсу Windows 8, такие же кнопочки, переключатели, флажки и т.п. Кстати, на скриншоте слева вы видите тот самый мини-агент (командный) центр, который появляется при клике по значку антивируса в трее. Кстати, сам паучок в трее, теперь у нас не зеленый, а серый ... (написав эту фразу я понял что обзор сводится к обсуждению изменений элементов графического интерфейса и понял что пора его заканчивать) ...

Ну и в качестве резюме. По моей субъективной оценке существенного прироста в производительности, равно как и ее потери, по-сравнению с девятой версией - я не заметил. Но, я думаю, что не стоит судить об этом по первым 15 минутам работы с антивирусным продуктом (чуть позже, когда 10.0 немного "приживется" у меня - добавлю пару строк комментария к этому посту). В новой версии появились функции, которые диктует окружающая действительность - возможность backup'а важных данных, улучшенная версия родительского контроля (интересно, а много людей ей пользуются?), а также множество мелких исправлений и улучшений, направленных на улучшение юзабилити продукта (домохозяйками ;) в целом. Собственно, грамотный маркетинговый ход ... Наш антивирус поможет вам справиться с троянцами шифровальщиками (если вы потрудитесь его настроить) ... в условиях, когда конкуренты не заявили подобной "фичи" - наверное это правильно. Если вы пользовались до этого DrWeb'ом и у вас современный ПК - можно смело обновляться, фатальных неприятностей не случится. Настройки подхватятся, лицензия перенесется ... Жизнь продолжится ))

На этой радостной ноте я и закончу этот пост. Всем спасибо ))

p.s. Скачать демку DrWeb 10.0 можно тут, там же можно получить полнофункциональную трехмесячную демо-версию, которая по-функционалу ничем не отличается от коммерческой. Кстати сейчас полнофункциональную версию можно приобрести со скидкой 40%.

p.p.s. Скриншот потребления памяти (Windows 8, 4 Gb RAM):


вторник, 11 ноября 2014 г.

Как разблокировать Билайн А106?

В этой заметке я расскажу вам о том как разблокировать телефон Билайн А106 от оператора. Немного побродив по просторам интернета, стало понятно что публичного и быстрого решения вообщем-то нет, о чем свидетельствует масса запросов по этому телефону, например на mforum.ru. Где-то люди ищут способы разблокировки с помощью боксов (программаторов), есть даже unlocked full (образ прошивки уже разлоченного телефона), прошив который в телефон с помощью специального ПО телефон становится разблокированным. Однако, данный способ подойдет далеко не всем. Так, например, различным сервисным центрам по ремонту сотовых / мастерским, обладающим необходимым оборудованием и ПО - да, "простому человеку" имеющему на руках телефон - скорее всего нет.

И вот тут-то как раз нужно сказать что решение все-таки существует. Билайн А106 можно разблокировать официально предусмотренным производителем методом, а именно с помощью кода разблокировки. Небезызвестный вам сайт UnlockClub.Ru как раз проводит бесплатное тестирование. Все что нужно - это просто подать заявку по соответствующей форме и получить в ответ заветный NCK код. Заявки можно подать в двух местах:

Т.е. читаем условия участия и порядок оформления завяки, оставляем заявку и получаем NCK код. Который вводим на запрос телефона при вставленной симке другого оператора.

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


Аппарат представляет из себя простейшую звонилку с цветным дисплеем 128x160 пикселей, 1.77". Поддерживаемые стандарты и частоты: GSM/GPRS 900/1800 MHz. Помимо стандартных функций - калькулятора, FM-радио, фонарика и т.п., вполне привычных для телефонов подобного класса - есть и небольшие технические нововведения. Как вы можете видеть из картинки справа, аппарат поддерживает Micro SD карты до 8 Gb и способен проигрывать wav, amr, mp3, m4a, aac, midi, mid, а также видео - 3gp и mp4. Не думаю что кто-то будет пережимать любмый фильм в mp4 или 3gp чтобы посмотреть его на А106 в дороге )) Но тем неменее потенциально, такая возможность есть.




понедельник, 10 ноября 2014 г.

Проверка корректности IMEI. Алгоритм Луна.




В этом небольшом посте я приведу несколько реализаций широко известного алгоритма Луна (Luhn algorithm) на JavaScript, который используется при проверке контрольной суммы IMEI. Вверху, вы можете видеть онлайн-форму для проверки, ну а теперь собственно перейдем к реализациям.

Вариант 1.

<script language="javascript">
<!--
function luhnChk(luhn) {
    var len = luhn.length,
        mul = 0,
        prodArr = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]],
        sum = 0;
 
    while (len--) {
        sum += prodArr[mul][parseInt(luhn.charAt(len), 10)];
        mul ^= 1;
    }
 
    return sum % 10 === 0 && sum > 0;
};
;
-->
</script>

По времени выполнения - этот вариант должен быть быстрее остальных.

Вариант 2.

// takes the form field value and returns true on valid number
function valid_credit_card(value) {
  // accept only digits, dashes or spaces
 if (/[^0-9-\s]+/.test(value)) return false;
 
 // The Luhn Algorithm. It's so pretty.
 var nCheck = 0, nDigit = 0, bEven = false;
 value = value.replace(/\D/g, "");
 
 for (var n = value.length - 1; n >= 0; n--) {
  var cDigit = value.charAt(n),
     nDigit = parseInt(cDigit, 10);
 
  if (bEven) {
   if ((nDigit *= 2) > 9) nDigit -= 9;
  }
 
  nCheck += nDigit;
  bEven = !bEven;
 }
 
 return (nCheck % 10) == 0;
}

четверг, 6 ноября 2014 г.

Mikrotik. Запрещаем доступ к определенным сайтам по IP.

Собственно небольшая заметка, которая пригодится тем, кто хочет порезать рекламу на некоторых сайтах по IP на домашнем / офисном Mikrotik'е, ну и вообще, не только рекламу, а и доступ к любым сайтам из списка. Для начала нам необходимо уяснить, что в настройках Mikrotik в разделе IP -> Firewall -> Adress Lists есть списки адресов. Т.е. первое что нужно сделать - это добавить туда какие-то хосты, а потом уже писать соответствующие правила для firewall'а (например, разрешить, запретить и т.п.). Добавим туда три сайта с рекламой по IP:

/ip firewall address-list
add address=195.234.99.231 comment=rarenok.biz list="Blocked sites"
add address=193.105.200.13 comment=post.rmbn.net list="Blocked sites"
add address=195.234.99.4 comment=realer.info list="Blocked sites"

А теперь добавим правило для firewall'а:

/ip firewall filter
add action=reject chain=forward comment="Blocked sites" dst-address-list=\
    "Blocked sites" dst-port=80 protocol=tcp reject-with=tcp-reset

Тут все просто. Для всех сайтов из списка Blocked sites, т.е. где Dst IP совпадает с IP из списка у нас будет действовать action reject с reject-with = tcp-reset. Таким образом при обращении к ним. браузер будет просто считать что соединение было сброшено и не будет пытаться "достучаться" до них.

Теперь попробуем "расширить" данный пример для сайтов с мобильной рекламой. Скачиваем любой из представленных на различных "околомобильных" форумах файл hosts, в котором якобы прописаны баннерные сети и прочая гадость, с которых Android устройства тащат рекламу. Файл hosts надо как-то распарсить, для того чтобы добавить эти хосты в список Mikrotik'а. Это можно сделать к примеру, с помощью следующего PHP скрипта:

<?php

$f = file_get_contents("hosts");
$hosts = explode("\n",$f);
foreach ($hosts as $host) {
 if (preg_match("/^([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})\s(.*)/",$host,$res)) {
 $dns_record = dns_get_record($res[2], DNS_A);
 // var_dump($dns_record);
 if (!empty($dns_record[0])) {
 echo '/ip firewall address-list add address='.$dns_record[0]['ip'].' comment='.$res[2].' list=host_mikrotik'."\r\n";
 }
 }

}
?>

В результате в stdout у нас будут выведены соответствующие команды для Mikrotik'а. Пример:

/ip firewall address-list add address=68.170.148.7 comment=208.185.87.8.liveadvert.com list=host_mikrotik
/ip firewall address-list add address=64.151.102.166 comment=t2.leadlander.com list=host_mikrotik
/ip firewall address-list add address=38.113.1.80 comment=counter.bizland.com list=host_mikrotik
/ip firewall address-list add address=46.30.212.41 comment=adpop.theglobe.net list=host_mikrotik
/ip firewall address-list add address=217.163.21.34 comment=ad.bharatstudent.com list=host_mikrotik

Т.е. эти сайты будут добавлены в список host_mikrotik. Ну и на "закуску" самое интересное. Думаю, все мы понимаем что резать что-либо по IP не есть хорошая идея. Т.к. "под нож" могут попасть и вполне полезные сайты на том же IP. А можно ли использовать в правилах firewall'а имена хостов вместо IP?

Ответ на этот вопрос как раз дает статья - Use host names in firewall rules. Оставляю вам ее для самостоятельного изучения. Если вкратце - то все строится на динамическом резольвинге имен. Так, например, если вы введете в терминале Mikrotik'а put [:resolve vk.com], то увидите IP vk.com ... только в статье предлагается это делать с периодичностью 1 час. Т.е. раз в час в шедулере запускается скрипт updatehostnames, который обновляет адреса в заданном списке (изначально они задаются как 0.0.0.0). Ну и совсем напоследок - мануал по скриптовому языку в Mikrotik.

p.s. На всякий случай текст скрипта Mikrotik для обновления IP в списке:

 /system script add \
   name=resolvehostnames policy=write,read \
   source="# define variables\r\
   \n:local list\r\
   \n:local comment\r\
   \n:local newip\r\
   \n:local oldip\r\
   \n\r\
   \n# Loop through each entry in the address list.\r\
   \n:foreach i in=[/ip firewall address-list find] do={\r\
   \n\r\
   \n# Get the first five characters of the list name\r\
   \n  :set list [:pick [/ip firewall address-list get \$i list] 0 5]\r\
   \n\r\
   \n# If they're 'host_', then we've got a match - process it\r\
   \n  :if (\$list = \"host_\") do={\r\
   \n\r\
   \n# Get the comment for this address list item (this is the host name to u\
   se)\r\
   \n    :set comment [/ip firewall address-list get \$i comment]\r\
   \n    :set oldip [/ip firewall address-list get \$i address]\r\
   \n\r\
   \n# Resolve it and set the address list entry accordingly.\r\
   \n    : if (\$newip != \$oldip) do={:set newip [:resolve \$comment]\r\
   \n    /ip firewall address-list set \$i address=\$newip}\r\
   \n    }\r\
   \n  }"

среда, 5 ноября 2014 г.

Разблокировка ZTE MF823 (Мегафон М100-3) кодом разблокировки.

Так или иначе все равно приходится возвращаться к теме мобильных устройств по вашим просьбам. И в этом посте я расскажу вам как разблокировать 4G/LTE модем ZTE MF823 (Мегафон М100-3) с помощью кода разблокировки. Если взять мегафоновскую версию модема, то, наверное, все видели, что при попытке вставить в модем SIM-карту другого оператора встроенное ПО для соединения с интенрнет - Megafon Internet запрашивает у вас некий Unlock Code (код разблокировки сети), см. скриншот:


Теперь, благодаря сайту UnlockClub.Ru у вас есть возможность бесплатно принять участие в тестировании и получить код разблокировки. Все что необходимо сделать - это выполнить условия участия в тестировании на форуме UnlockClub.Ru в этой теме - Мегафон М100-3 (ZTE MF823). Разблокировка кодом. или в соответствующем обсуждении в группе ВКонтакте. Обратите внимание, что на момент написания этого поста тестирование все еще активно и заявки на разблокировку принимаются, однако, в будущем - оно может завершиться в любой момент. 

Рассмотрим вкратце, что же нам потребуется. Ничего сложного в этом нет, скачиваем по предоставленной ссылке драйвера Qualcomm, устанавливаем их, затем скачиваем и запускаем приложение ZTE MF823 Manager. Подключаем модем к ПК, устанавливаем драйвера со встроенного CDROM раздела, если вы еще не успели сделать это до этого. Запускаем встроенное ПО и убеждаемся что модем у нас доступен по адресу 192.168.0.1 (в мегафоновской версии, при входе по этому адресу будет выдаваться ошибка, т.к. web-интерфейса у Мегафон М100-3 по-умолчанию нет). После этого можно запускать ZTE MF823 Manager:


Далее, делаем все по шагам. Нажимаем кнопку "1. Connect", в результате у вас в системе должен появиться еще один COM-порт, который называется HS-USB Android Diag 902D COM-порт:


Запоминаем его номер и нажимаем "2. Detect". После этого в выпадающем списке у вас должны появиться все COM-порты представленные в системе. Выбираем из списка COM-порт номер которого мы запомнили на предыдущем шаге (в данном случае это COM6) и нажимаем кнопку "3. Read". Если все получилось, то в окне лога вы увидите что-то вроде:

IMEI: 862926022081114
Unlock attempts: 05
Status: Locked
Encrypted: 61D4BD7108B7B7504EEF78B9829B9BF0

Копируем эту информацию и оставляем запрос в теме форума или в обсуждении и дожидаемся вашего NCK кода. Ввести полученный код разблокировки вы можете в программе для соединения с интернет (см. скриншот, код разблокировки вводится в поле Unlock Code), в web-интерфейсе (если он есть в вашей версии модема) или с помощью AT-команды - AT+ZNCK="nck code".

Сам себе DynDNS. Или делаем собственный DynDNS сервер.

Немного отвлечемся от темы телефонов, модемов, да и вообще GSM в целом. В этой заметке я расскажу вам о том как с минимальными затратами поднять собственный DynDNS сервер. Хотя наверное это будет слишком громко сказано, поэтому вкратце опишем задачу по-другому. Допустим у нас есть домен company.ru и мы хотели бы использовать его поддомены для резольвинга некоторых хостов имеющих динамические IP. Поясню на примере. Допустим у нас есть несколько удаленных точек, на которых функционирую, ну, к примеру, IP камеры. Вы бы хотели чтобы доменные имена camera01.company.ru, camera02.company.ru и т.п. резольвились на их текущий IP. При условии что IP-адреса на данных точках выдаются провайдером динамически. Как вариант, конечно, можно воспользоваться сервисами вроде DynDNS или NO-IP, но их использование (в бесплатном режиме) связано с определенными ограничениями, например на DynDNS необходимо ежемесячно подтверждать хост, иначе ваша учетная запись будет удалена и т.п.

Что нам понадобится изначально? Во-первых сам домен - у нас это будет dnsapi.ru. Во-вторых хостинг с поддержкой PHP и включенными модулями CURL и SimpleXML (найти такой дешево - тоже не проблема). Поставим конкретную задачу, допустим, у нас есть хост - назовем его decker и мы хотим чтобы имя decker.dnsapi.ru всегда резольвилось по текущему IP данного хоста.

Теперь настало время рассказать вам о замечательном сервисе Почта для домена от Яндекс и о его API для работы с DNS - API DNS Яндекс.Почты. Итак, первое что мы должны сделать - это делегировать наш домен на Яндекс, чтобы в интерфейсе почты для домена он у нас выглядел вот так:


Про то как делегировать домен на Яндекс - здесь мы подробно останавливаться не будем, т.к. все эти моменты очень подробно расписаны в помощи почты для домена. Если в двух словах, то сначала (!) нам надо подтвердить владение доменом одним из предложенных способов, а затем изменить NS записи DNS-зоны нашего домена на dns1.yandex.net и dns2.yandex.net. Основное сделано. Теперь внимательно читаем мануал про API DNS, из которого мы сможем узнать, что для домена делегированного на Яндекс возможно программное изменение любых элементов DNS-зоны. Т.е. мы можем добавлять поддомены, изменять записи и т.п. программное. Понимаете к чему я веду?

Создали мы поддомен decker в зоне dnsapi.ru, т.е. decker.dnsapi.ru - изменили программное A-запись для этого поддомена на свой текущий IP, и бинго. Но как узнать свой текущий API, а тем более как написать скрипт для изменения A-записи? Все элементарное - просто. А именно - я все это сделал уже за вас )) Теперь единственное что от вас потребуется - это разместить нижепреведенный скрипт на вашем хостинге. Но для начала необходимо получить токен. Это делается 1 раз, и этот токен потом необходимо прописать в скрипте. 

get_token - Метод предназначен для получения авторизационного токена. Авторизационный токен используется для авторизации в API DNS, которая требуется для обращения к остальным методам API. Получать токен нужно только один раз. Чтобы получить токен, следует иметь подключенный домен, авторизоваться его администратором и перейти по указанному в документации адресу.

Ну а теперь собственно код скрипта (в этот файл нужно вставить свой токен, свои имя домена, и имя хоста (поддомена) для которого будет обновляться IP):

<html><body><pre>
<?php

function validip($ip) {
 if (!empty($ip) && $ip == long2ip(ip2long($ip)))
 {
  // reserved IANA IPv4 addresses
  // http://www.iana.org/assignments/ipv4-address-space
  $reserved_ips = array (
    array('0.0.0.0','2.255.255.255'),
    array('10.0.0.0','10.255.255.255'),
    array('127.0.0.0','127.255.255.255'),
    array('169.254.0.0','169.254.255.255'),
    array('172.16.0.0','172.31.255.255'),
    array('192.0.2.0','192.0.2.255'),
    array('192.168.0.0','192.168.255.255'),
    array('255.255.255.0','255.255.255.255')
  );

  foreach ($reserved_ips as $r) {
    $min = ip2long($r[0]);
    $max = ip2long($r[1]);
    if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false;
  }
  return true;
 }
 else return false;
}

function getip() {
 if (isset($_SERVER)) {
  if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && validip($_SERVER['HTTP_X_FORWARDED_FOR'])) {
   $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && validip($_SERVER['HTTP_CLIENT_IP'])) {
   $ip = $_SERVER['HTTP_CLIENT_IP'];
  } else {
   $ip = $_SERVER['REMOTE_ADDR'];
  }
 } else {
  if (getenv('HTTP_X_FORWARDED_FOR') && validip(getenv('HTTP_X_FORWARDED_FOR'))) {
   $ip = getenv('HTTP_X_FORWARDED_FOR');
  } elseif (getenv('HTTP_CLIENT_IP') && validip(getenv('HTTP_CLIENT_IP'))) {
   $ip = getenv('HTTP_CLIENT_IP');
  } else {
   $ip = getenv('REMOTE_ADDR');
   }
 }

 return $ip;
}

function open_https_url($url,$refer = "",$usecookie = false) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); 
    if ($refer != "") { 
        curl_setopt($ch, CURLOPT_REFERER, $refer ); 
    } 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
 $result =curl_exec ($ch); 
 curl_close ($ch); 
 return $result; 
}

/* Settings */
$token = ""; // ваш токен
$domain = ""; // ваш домен
$host = "";      // ваше имя хоста (поддомена)

$res = open_https_url("https://pddimp.yandex.ru/nsapi/get_domain_records.xml?token=".urlencode($token)."&domain=".urlencode($domain));
$xml = @simplexml_load_string($res,'SimpleXMLElement', LIBXML_NOCDATA);

if (!empty($xml)) {

if (($xml->domains->error)  == "ok") {
foreach ($xml->domains->domain->response->record as $record) {
 // echo $record["subdomain"]."\t".$record["type"]."\t".$record["id"]."\r\n";
 if (($record["subdomain"] == $host) && ($record["type"] = "A")) break;
}

if (($record["subdomain"] == $host) && ($record["type"] = "A")) {
// нашли запись о нужном поддомене
   echo "Domain: ".$record["domain"].", IP: ".$record[0]." [ID: ".$record["id"]."]\r\n";
   //$ip = "192.168.1.5"; 
   $ip = getip();
   echo "New IP: ".$ip."\r\n";
   $res = open_https_url("https://pddimp.yandex.ru/nsapi/edit_a_record.xml?token=".urlencode($token).
 "&domain=".urlencode($domain)."&subdomain=".urlencode($record["subdomain"])."&record_id=".
 urlencode($record["id"])."&content=".$ip);
   $xml = @simplexml_load_string($res,'SimpleXMLElement', LIBXML_NOCDATA);
   echo "Status: ".$xml->domains->error."\r\n";
} // failed to find host
} // failed to retrieve zone records
} // empty xml

?>
</pre></body></html>

После того, как мы отредактировали секцию settings в скрипте - смело заливаем его на свой хостинг и открываем с того хоста (!) для которого необходимо обновить IP, результат выполнения вы видите прямо в браузере:


Как мы видим, IP адрес для поддомена decker.dnsapi.ru был успешно изменен. Если мы теперь сделаем nslookup decker.dnsapi.ru - то увидим IP нашего хоста. Правда есть единственное "но", для обновления DNS-записей "по всему интернету" требуется некоторое время.

Таким образом серверная часть у нас готова. Например, мы разместили скрипт на нашем хостинге по адресу http://ourhosting.org/script.php, теперь на ПК decker (или на маршрутизаторе) достаточно добавить в автозагрузку (или в планировщик, для периодического обновления, например каждые 30 минут) запуск этого скрипта. Т.е. фактически нам нужно сделать HTTP GET запрос к скрипту http://ourhosting.org/script.php ... Берем wget, и создаем bat'ник в котором будет запускаться wget http://ourhosting.org/script.php каждые 30 минут. Бинго! В итоге хост decker.dnsapi.ru всегда ссылается на внешний IP той машины, на которой запущен данный скрипт. К слову, возможности выполнения HTTP GET запросов встроены в любое сетевое оборудование, например, в Mikrotik и т.п. Так что вариантов использования предложенного способа масса.

Вопросы, замечания, пожелания, комментарии приветствуются ...

p.s.  По просьбам трудящихся скрипт для Mikrotik (необходимые права test, write, read):

/tool fetch url="http://ourhosting.org/script.php" mode=http dst-path=decker.txt
:log info [/file get decker.txt contents]

Здесь в качестве URL - выступает URL размещенного нами PHP скрипта. 

суббота, 1 ноября 2014 г.

ZTE MF823 (Мегафон M100-3). Полезные советы.

Всем привет ... Этот пост скорее всего будет немного сумбурным и посвящен модему ZTE MF823, а именно, его мегафоновской версии Мегафон M100-3. Здесь я расскажу о некоторых его "секретах", которые, надеюсь, будут полезны не только любителям "поковыряться" в прошивках, но и обычным пользователям. Но для начала - давайте разберемся, что же мы имеем в мегафоновской версии? По-умолчанию после установки драйверов на модем со встроенного CDROM модем устанавливается как RNDIS устройство. Т.е. как сетевой девайс имеющий IP адрес 192.168.0.1, у ПК же появляется отдельный сетевой интерфейс в сетевых подключениях - Remote NDIS based Internet Sharing Device.

Фактически ZTE MF823 - это устройство на базе Linux, т.е. полноценная железка с web-интерфейсом (к слову, у него есть даже ADB как в Android). Однако, при попытке зайти на http://192.168.0.1/ мы получаем ошибку - Access Error: Site or Page Not Found, что свидетельствует о том, что web-интерфейс в мегафоновской версии модема отсутствует (по-крайней мере в так было в доставшемся мне экземпляре). Давайте разберемся, как все-таки добавить web-интерфейс в этот модем.

Восстанавливаем web-интерфейс Мегафон М100-3


Для начала возьмем PuTTy и через Telnet зайдем на модем. Т.е. зайдем на 192.168.0.1:23:


Логин и пароль: root и zte9x15 соответственно. После попадания в консоль запускаем FTP Server (да, да, там есть и такой):

tcpsvd -u root:root -vE 0.0.0.0 21 ftpd -w / &

После этого подключаемся к 192.168.0.1 любым FTP клиентом и в /usr/zte_web/web/ заливаем распакованное содержимое архива - megafon_m100-3_web.7z (архив естественно нужно распаковать на ПК и содержимое папки web из архива залить в /usr/zte-web/web/)

И при входе в web-интерфейс по 192.168.0.1 видим следующую картинку:


Все. Web-интерфейс у модема теперь есть и рулить им можно непосредственно из него.

Чуть позже я опишу здесь другие интересные "находки" ... а то уже светает ))

Factory Mode

Переход в данный режим осуществляется с помощью команды:


Т.е. достаточно перейти по этой ссылке и модем уйдет в Factory Mode, в котором "проявятся" несколько COM-портов модема, включая диагностический. Драйвера для этого режима можно найти тут - ZTEDrvSetup.zip. Модем должен ответить так: {"result":"FACTORY:ok"}. В результате, модем будет переключен в другой режим (PID = 0016). Следите в ДУ за установкой драйверов. В результате, должно появиться 3 устройства - ZTE Diagnostics Interface, ZTE Proprietary USB Modem и ZTE NMEA Device.

Для возврата в обычный режим - необходимо подключиться терминалом (в качестве терминального клиента можно использовать Putty) к порту на котором находится модем и ввести команду AT+ZCDRUN=F. После чего переподключить модем. 

На режиме Factory Mode - я остановлюсь чуть позже.

Кстати, переключиться в этот же режим из консоли Linux можно с помощью:

echo 2 > /sys/class/android_usb/android0/debug_enable (при этом интерфейс RNDIS также пропадает, т.е. модем становится недоступным по 192.168.0.1)

Другое


http://192.168.0.1/goform/goform_get_cmd_process?cmd=imei - узнать IMEI модема.

Кстати, с помощью goform_get_cmd_process и параметра в cmd можно получить не только IMEI, но еще и следующие параметры (разбираться что к чему относится пока нет времени, поэтому просто списоком):

HTTPSHARE_GETCARD_VALUE,  get_loginfo,  station_list,  simcard_status,  current_network,  ConnectionMode,  vdf_configuration,  router_diagnostics,  wifi_settings,  login_status,  battery_status,  device_diagnostics,  network_location,  HTTPSHARE_AUTH_GET,  HTTPSHARE_GETCARD_NAME,  HTTPSHARE_GETCARD_VALUE,  client_ip_address,  UpgradeToolInfo,  battery_value,  pbm_data_info,  pbm_data_total,  pbm_capacity_info,  sms_page_data,  sms_data_total,  sms_parameter_info,  sms_cmd_status_info,  sms_capacity_info,  sms_status_rpt_data,  sms_data_class0,  cb_data_total,  cb_msg_total_num,  ussd_data_info,  get_device_mode,  get_user_mac_addr,  pack_size_info,  new_version_state,  current_upgrade_state,  upgrade_result,  if_has_select,  update_info,  GetUpgAutoSetting,  upg_roam_switch

Разблокировка с помощью NCK кода


Бытует довольно распространенное мнение, что для модемов ZTE кодов разблокировки не существует, и что они, якобы, разблокируются только перепрошивкой. По-крайней мере так написано в шапке одной известной темы на популярном форуме 4pda.ru, да и на некоторых других ресурсах.

Собственно это видео снималось лишь для того, чтобы развеять этот миф. Производитель (ZTE) предусмотрел штатную возможность разблокировки своих устройств с помощью уникального NCK кода. И все это работает, в чем вы и сможете убедиться в данном видео. Для примера мной был взят модем Мегафон М100-3 (ZTE MF823), на видео хорошо видно, как мы вводим код разблокировки в web-интерфейс (также его можно было ввести с помощью AT-команды - AT+ZNCK="code") - после чего модем успешно работает с симкой МТС.