2015-01-08 2 views
0

Я работал со старым шлюзом GSM, в документации показано, как подключиться к устройству через telnet для отправки SMS-сообщений. Мой план состоял в том, чтобы написать сценарий ожидания на моем CentOS-сервере, который мог бы отправлять простые сообщения оповещений, когда это необходимо.Telnet управляет характером поведения в CentOS vs Windows

Когда я проверил это я подключен к устройству PorTECH с помощью Telnet-клиент для Windows, я должен был ввести следующие команды:

module1 
#The following command tells the device to echo back received commands to the telnet client 
ate1 

at+cmgf=1 

at+cmgs="07XXXXXXXXX" 

> Message to be sent 

Ctrl-Z

В любой момент после выбора Module1 вас можно нажать ctrl-x, чтобы освободить модуль1, это отлично работает.

Ctrl-Z используется здесь для отправки сообщения, которое вы напечатали.

Я написал ожидать сценарий для обработки этой серии событий, но когда дело дошло до отправки Ctrl-Z сообщения (Я использовал \ 032, и это показывает^Z в окне терминала, когда я запускаю скрипт) ничего не произошло.

Я был немного озадачен, поэтому загрузил telnet в CentOS и сам прошел через этапы. Я заметил, что когда я нажал ctrl-x, чтобы освободить модуль, я должен был вернуть карету для наблюдения за этой командой, поэтому я попытался добавить это к моему сценарию (это не помогло). Я также попытался запустить все команды, упомянутые выше, для отправки SMS-сообщения, когда он пришел к той части, где я нажимаю ctrl-z, чтобы отправить сообщение после его ввода, даже если я следую за вводом ctrl-z с возвратом каретки не наблюдалось.

Я также пытался запустить telnet с флагом -8 (я не мог пройти мимо приглашения на вход) и флагом -7, который позволил мне войти в систему, но не преодолел проблему с помощью ctrl-z ввод в конце.

Я также попытался загрузить telnet, запустив «toggle localchars», а затем попытался пройти шаги, которые дали мне тот же результат с ctrl-z.

Я также видел сообщение, предлагающее попробовать «переключить параметры» и «переключить термины», которые могут помочь диагностировать проблему, но я не уверен, на что я смотрю, когда у меня есть эти параметры, после жму Ctrl-Z:

^ZSENT IAC SUSP 
SENT DO TIMING MARK 

Я не уверен, что это будет означать, или как проверить, насколько она отличается от работы телнет Windows. Может ли кто-нибудь сообщить, почему этот вход имел бы другой эффект от нажатия ctrl-z в сеансе telnet Windows?

EDIT

Из того, что я могу сказать, программа Microsoft telnet посылает те же восьмеричные значения на сервер телнет как программа CentOS telnet, так что я действительно не понимаю, почему острые Ctrl-Z работает в Windows, телнет , но не работает в telnet telnet ...из совета Zathrus в #centos Irc канал Я также попытался отправки Ctrl-V перед моим Ctrl-Z (как в сценарии и простой телнет), и это не помогло ...

ДАЛЕЕ EDIT

Я делал некоторое рытье на этом сегодня, я побежал Wireshark на моей машине Windows, и обнаружили, что Windows, посылает пакет с «данными: \ 032», как и ожидалось, но когда я захватить трафик с ТСРйитр сеанса telnet на моей машине CentOS отправляет «Suspend Current Process» вместе с «Make Timing Mark».

Запуск сценария, который я написал вместо ручного подключения к telnet, по-видимому, отправляет ту же информацию, независимо от того, что я отправляю литерал \ 032 выражение, которое оно переводится как «приостанавливать текущий процесс», в том же пакете I также получите символы \ r \ n, отправленные в конце моего ожидания.

Просто для ясности, вот сценарий я использую для отправки сообщений:

#!/usr/bin/expect 
# Test script for SMS sends automatically via expect & telnet 

#Set a sensible timeout 

set timeout 20 

#Our target device 

set target 10.0.0.114 

#set username and password info for SMS sending 

set user voip 
set pword 1234 



#spawn the telnet session 

spawn telnet $target 

#Set up the expects fo the login process 

expect "username:" 

send "$user\n" 

expect "password:" 

send "$pword\n" 


#I've only put a SIM in module1 so far 

expect "]" 

#check state1 for free, make sure it isn't in use already, exit if returns none 

send "state1\n" 

expect { 
    "free" { send "module1\n" } 
    "none" { send "logout\n" } 
} 

expect "got!! press 'ctrl-x' to release module 1." { send "ate1\n" } 

expect "0" { send "at+cmgf=1\n" } 

expect "0" { send "at+cmgs=\"07XXXXXXXXX\"\ntesting\032\015\012\n" } 

#this should be the ctrl-z input as per http://www.unix-manuals.com/refs/misc/ascii-table.html 
#send "\032" 

interact 

Я также попытался запустить захват после собираюсь в телнет и подачи команды тумблера localchars перед открытием соединения на шлюз GSM этот захват также показывает, что переданные данные являются «Suspend Current Process», а затем «Do Timing Mark»

Есть ли что-нибудь еще, что я могу сделать, чтобы отправить литерала \ 032 выражение и не интерпретировать его ?

ДАЛЕЕ EDIT:

Вот перехваченные пакеты из сессий для Windows и Linux Telnet

Это шестигранной захвачена для телнет сессии Windows, пакет показан в Wireshark, как «Данные: \ 032 "

0000 00 03 7e 00 44 4f 30 85 a9 0e a6 52 08 00 45 00 ..~.DO0....R..E. 
0010 00 29 3d 0b 40 00 80 06 b1 32 0a 00 f8 1f 0a 00 .)[email protected] 
0020 00 72 10 02 00 17 cf 41 a8 01 b0 3e 52 22 50 18 .r.....A...>R"P. 
0030 f9 1d 06 5f 00 00 1a        ..._... 

Это шестигранной захвачена для телнет сессии Linux, которая показывает в Wireshark, как„Приостановить текущий процесс“, а затем„Do Timing Mark“:

0000 00 03 7e 00 44 4f 00 16 35 37 74 22 08 00 45 10 ..~.DO..57t"..E. 
0010 00 2d 08 43 40 00 40 06 13 c6 0a 00 0a 41 0a 00 [email protected]@......A.. 
0020 00 72 b1 46 00 17 b8 b3 01 36 a9 22 f2 7e 50 18 .r.F.....6.".~P. 
0030 39 08 1e d2 00 00 ff ed ff fd 06     9.......... 

ответ

1

Не хватает респ комментировать

Вы знаете, что линия окончаний в (побегах в восьмеричном)

  • Окна CR + LF (\ 015 \ 012)
  • Linux только LF (\ 012)

дополнительные RETURN вы должны ввести после CTRL-X может понадобиться после каждой выполненной команды?

Если это так, то шлюз будет сталкиваться с конкатенацию всех отправленных строк, пытаясь разобрать их, некстати, как одну команду (от вашего CentOS [отсюда Linux] машина)

+0

Привет, спасибо за ответ, я обновил свой вопрос, команда ate1 заставит устройство повторять все обратно на сеанс telnet, чтобы вы знали, когда что-то было отправлено на него. Я могу предоставить материалы/ответы, если это поможет.Я заметил, что когда я нажимаю ctrl-x или ctrl-z в telnet windows, он сразу принимает его и не нуждается в возврате. Но в Linux ему нужно было вернуть его на сервер telnet. Я попробую добавить эти восьмеричные в свой скрипт, хотя и посмотреть, поможет ли это. – Rumbles

+0

Я попытался добавить оба CF + LF, но это не помогло – Rumbles

+0

@ Rumbles ofc, предоставляя ** полный ** в/и вывод (каждый с отличием помеченный) помогает отладить проблему! Если возможно, попробуйте переключить терминалы в необработанный режим (поэтому автоматически отображаются управляющие символы) – Florian

 Смежные вопросы

  • Нет связанных вопросов^_^