?

Log in

Мегафоновое. Модемное. - Оживший юзерпик

Nov. 11th, 2010

01:09 pm - Мегафоновое. Модемное.

Previous Entry Share Next Entry

В ноут воткнут мегафоновский модем. Хочу узнать баланс. Захожу на сайт московского Мегафона, ищу какой-нибудь «личный кабинет». На поиски ушло минут пять, не меньше. Да, и нашёл только полнотекстовым поиском. Хороший UI, годный.

Чтобы подключиться к этому selfservice, надо послать SMS и получить в ответ пароль. Можно, конечно, переткнуть симку в мобилу, послать и получить. Но мы не ищем лёгких путей.


$ cu -l /dev/ttyUSB_utps_modem
AT+CMGF=1
OK
AT+CMGS="000105"
> 41
+CMGS: 1

OK
AT+CMGL="ALL"
…

OK
AT+CMGR="0"
+CMGR: «REC READ»,"+74955025555",,"10/11/10,18:04:43+12"
04230441043B0443043304300020042104350440043204380441002D04130438043400200430043A04420438043204380440043E04320430043D0430002C00200412043004480020043F04300440043E043B044C0020003400350032003800310033

OK
~.
Так… Эта галиматься, судя по Wikipedia, — UTF-16. Как из command line сделать бинарную строчку? С разбегу не нашёл, написал ценный программный продукт:

# include <stdio.h>

int hex2bin( unsigned char c )
{
	if ( c >= '0' && c <= '9' )
		return c — '0';
	else
		return c — 'A' + 10;
}

int readByte( void )
{
	int c1 = getchar();
	int c2 = getchar();
	return hex2bin( c2 ) | ( hex2bin( c1 ) << 4 );
}


void main( void )
{
	while ( 1 ) {
		int c1 = readByte();
		int c2 = readByte();
		if ( feof( stdin ) )
			break;
		putchar( c2 );
		putchar( c1 );
	}
}
Дальше hex2bin | iconv -f UTF-16 и вуаля, у меня есть пароль. После этого в selfservice легко обнаружилось, что на тарифе Internet-only ещё по умолчанию включена услуга «другой гудок», или как-то в этом роде, за какие-то 60руб/мес. Милые шалости…

Comments:

[User Picture]
From:madw
Date:November 11th, 2010 10:16 am (UTC)
(Link)
Сайт у Мегафона всегда отличался "дружелюбностью" интерфейса :)

Раньше я просто запомнил куда тыкать мышей, а пару месяцев назад они дизайн поменяли, тоже долго не мог найти личного кабинета :)
(Reply) (Thread)
[User Picture]
From:_slw
Date:November 11th, 2010 10:18 am (UTC)
(Link)
а нефиг перллом пренебрегать!
(Reply) (Thread)
[User Picture]
From:tobotras
Date:November 11th, 2010 10:19 am (UTC)
(Link)
If you have a problem to which Perl is the best solution, you have at least two problems!
(Reply) (Parent) (Thread)
[User Picture]
From:vitus_wagner
Date:November 11th, 2010 11:26 am (UTC)
(Link)
Вообще аналоги перлового pack/unpack есть в любом приличном скриптовом языке. Я, когда есть выбор, обычно tcl использую. Но аналогичную задачу с ussd в мегафоновском модеме мне как-то пришлось решать на роутере с олеговской прошивкой. Там из всех скриптовых языков только sh и awk, и оба - неприличные.
Вот я поразвлекался-то
(Reply) (Parent) (Thread)
[User Picture]
From:dimas
Date:November 11th, 2010 10:23 am (UTC)
(Link)
а можно было не выпендриваться, а запустить их поделие линуксовое :)

ну и запомнить команду баланса оттуда на будущее :)))

но сайт - гавно, адназначно. не говоря уже о том, что то ли ссылки в бумажке к модему, или в гуеморде были неправильные, а "личный кабинет" далеко не всегда работает ...

p.s. что за ТП и как покупался, кстати? у меня Интернет-старт, который шел с модемом, лишних услуг и поборов не замечено.
(Reply) (Thread)
[User Picture]
From:tobotras
Date:November 11th, 2010 10:25 am (UTC)
(Link)
Я поделие снес за глючность :)

Кстати, команду баланса надо было бы выяснить :(

Хотя, можно же просто звонить на номер USSD.

Не помню, я с этого старта переключился, кажется, на какой-то Лайт (безлимитный).
(Reply) (Parent) (Thread)
[User Picture]
From:dimas
Date:November 11th, 2010 10:41 am (UTC)
(Link)
у меня модем не умеет звонить голосом :)

правда, говорят, это чисто програмное ограничение, надо как-нить найти время и перешить нафиг на свободную от симлока и этого ограничения прошивку ...

p.s. буду запускать поделие - посмотрю команду :)
p.s.2. а не дешевле раз в две недели покупать новую симку за 150р, если нужен безлимит? или там скорость больше, чем 238Кбит/с?
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:November 11th, 2010 11:02 am (UTC)
(Link)
512Мбит или 1024, смотря, 800 или 1100руб ты готов платить.
(Reply) (Parent) (Thread)
[User Picture]
From:dimas
Date:November 11th, 2010 11:03 am (UTC)
(Link)
и чего, оно реально эту скорость выдает? за городом то и 238 на пределе, но там WCDMA нет (светодиод зеленый, а не синий), или как там оно называется ...
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:November 11th, 2010 11:07 am (UTC)
(Link)
Не-не, у меня на даче синий, двух видов: то HSDPA, то ещё какая-то аббревиатура, забыл…
(Reply) (Parent) (Thread)
[User Picture]
From:tnt23
Date:November 11th, 2010 10:58 am (UTC)
(Link)
AT+CUSD=1,"*100#" или как-то так?

А то, что тебе выдал модем, называется PDU.
(Reply) (Parent) (Thread)
[User Picture]
From:akovalenko
Date:November 11th, 2010 11:27 am (UTC)
(Link)
Вы на выдачу-то посмотрите внимательнее — какой блин PDU после CMGF=1 и по команде, упоминающей "REC READ"? Режим текстовый; а что непонятно, так это просто charset такой (обычно такой эффект дает AT+CSCS="UCS-2")
(Reply) (Parent) (Thread)
[User Picture]
From:tnt23
Date:November 11th, 2010 11:50 am (UTC)
(Link)
А, ну виноват.
(Reply) (Parent) (Thread)
[User Picture]
From:vitus_wagner
Date:November 11th, 2010 11:29 am (UTC)
(Link)
Насколько я помню, USSD-номер баланса мегафон понимает и *100# (как в МТС) и *102# (как в Билайн). Все-таки от того, что он третий, иногда бывает польза.

Засада бывает в том, что некоторые модемы не понимают USSD-номера, сказанного человеческим языком

AT+CUSD=1,"*100#",15

а хотят номер в семибитно-закодированном виде:

AT+CUSD=1,AA180C3602,15

Один из двух указанных вариантов должен сработать и вернуть что-то типа той твоей SMS-ки.
(Reply) (Parent) (Thread)
[User Picture]
From:poige
Date:November 12th, 2010 03:40 am (UTC)

> и *102# (как в Билайн)

(Link)
Да как бы нет.
(Reply) (Parent) (Thread)
[User Picture]
From:akovalenko
Date:November 11th, 2010 10:27 am (UTC)
(Link)
На случай, если ещё понадобится: AT+CSCS регулирует charset для текстового режима (AT+CSCS=? показывает возможные варианты; если повезет, там есть UTF-8, настоящий, текстовый; перед тем, как на этот список смотреть, лучше дать AT&F, а то имена поддерживаемых charsetов тоже в таком странном виде будут).

Ещё может пригодиться тот факт, что баланс обычно можно узнать запросом USSD, и для этого тоже есть команда:
AT+CUSD=0,"#100#",15
+CUSD: 0,"Minus:191,46r,Limit:300r "

Здесь #100# — запрос, который может зависеть от оператора (пример выше для МТС, но вообще *100# и #100# довольно-таки общепринято). Так как запрос задается в виде строкового литерала, на него тоже влияет +CSCS, как и на ответ.

Так что довольно легко сделать автоматическую проверялку, чтоб ещё и СМС-ки ругательные слала, когда деньги кончаются :)
(Reply) (Thread)
[User Picture]
From:tobotras
Date:November 11th, 2010 10:28 am (UTC)
(Link)
Отлично! Спасибо :)
(Reply) (Parent) (Thread)
[User Picture]
From:akovalenko
Date:November 11th, 2010 10:31 am (UTC)
(Link)
Ещё на всякий случай: третий аргумент CUSD, который 15, это что-то типа локали, причем 15 это что-то типа LANG=C. Реакция на разные его значения тоже зависит от оператора, но в общем случае 15 попробовать стоит.
(Reply) (Parent) (Thread)
[User Picture]
From:wildsun
Date:November 11th, 2010 10:37 am (UTC)
(Link)
мегафоновский USSD для баланеса: *102*1#

не за что :)
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:November 11th, 2010 11:02 am (UTC)
(Link)
:-d
(Reply) (Parent) (Thread)
[User Picture]
From:elentin
Date:November 11th, 2010 01:03 pm (UTC)
(Link)
Мегафон теперь тоже #100# должен понимать. К #102# они в своё время прикрутили какое-то уродское меню, которое я лично не осилила (вот ниже подсказывают, что #102*1#, угу).
(Reply) (Parent) (Thread)
[User Picture]
From:mds
Date:November 11th, 2010 10:37 am (UTC)
(Link)
Гудок услуге ист обирайтунг, грабен унд наглише бабкенп№здунг!
http://www.youtube.com/watch?v=Bxhs8jMnC7w
(Reply) (Thread)
[User Picture]
From:andjel
Date:November 11th, 2010 10:55 am (UTC)
(Link)
Сервисгид говоришь ;) (как работник МегаФона, пока ;)
(Reply) (Thread)
[User Picture]
From:tobotras
Date:November 11th, 2010 11:01 am (UTC)
(Link)
Да-да! :)
(Reply) (Parent) (Thread)
[User Picture]
From:poige
Date:November 12th, 2010 03:36 am (UTC)

> С разбегу не нашёл, написал ценный программный продук

(Link)
Я первым делом вспомнил iconv:
$  iconv -l | grep -i utf.*16
UTF-16//
UTF-16BE//
UTF-16LE//
UTF16//
UTF16BE//
UTF16LE//

(Reply) (Thread)
[User Picture]
From:poige
Date:November 12th, 2010 03:57 am (UTC)

Re: > С разбегу не нашёл, написал ценный программный прод

(Link)
А что касается "to binary", то man -k hex достаточно быстро выруливает на xxd - make a hexdump or do the reverse (первым делом вспомнил про openssl's enc, но он "увы").
(Reply) (Parent) (Thread)
[User Picture]
From:poige
Date:November 12th, 2010 04:05 am (UTC)

Re: > С разбегу не нашёл, написал ценный программный прод

(Link)
Итого:
$ echo '04230441043B0443043304300020042104350440043204380441002D04130438043400200430043A04420438043204380440043E04320430043D0430002C00200412043004480020043F04300440043E043B044C0020003400350032003800310033' | xxd -p -r | iconv -f utf16be
Услуга Сервис-Гид активирована, Ваш пароль 452813
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:November 12th, 2010 04:16 am (UTC)

Re: > С разбегу не нашёл, написал ценный программный прод

(Link)
О. xxd. Спасибо :)
(Reply) (Parent) (Thread)
[User Picture]
From:poige
Date:November 12th, 2010 04:19 am (UTC)

> О. xxd. Спасибо :)

(Link)
Самому пригодится. :)
(Reply) (Parent) (Thread)
[User Picture]
From:grisxa
Date:November 12th, 2010 07:05 pm (UTC)
(Link)
Я замену гудка сразу отключил, хоть она и бесплатная первые две недели. Через две недели зашёл в Сервис-Гид - и точно, они её включили обратно! :)
(Reply) (Thread)