Как подключиться из локального веб-браузера к удаленному серверу telnet и отправить предопределенные команды? - PullRequest
0 голосов
/ 15 августа 2011

У меня есть приложение call-центра, работающее с использованием php / javascript.Когда оператор находится в своем Mac или Windows или Linux с веб-браузером, таким как Firefox / Chrome / Opera / Internet Explorer.Мне нужно установить соединение в реальном времени с удаленным сервером для отправки команды типа «сделать вызов».

Но как я могу сделать, используя javascript соединение telnet с удаленным сервером?Возможно ли это с javascript, если да, то как и в каких браузерах?

Спасибо

Примечание: без использования этого

1) http://matthaynes.net/blog/2008/07/17/socketbridge-flash-javascript-socket-bridge/

2) http://stephengware.com/proj/javasocketbridge/

Продолжение: только я получаю эти пакеты при использовании Chrome?(Firefox / Opera / Midori / Safari, никто не работал).

# tcpdump -n -x -X -i any port 23
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes

16:37:00.446070 IP 1.164.45.143.56295 > 1.164.45.143.telnet: Flags [S], seq 205310205, win 32792, options [mss 16396,sackOK,TS val 37248521 ecr 0,nop,wscale 6], length 0
    0x0000:  4500 003c 96f4 4000 4006 a561 51a4 2d8f  E..<..@.@..aQ.-.
    0x0010:  51a4 2d8f dbe7 0017 0c3c c8fd 0000 0000  Q.-......<......
    0x0020:  a002 8018 fe94 0000 0204 400c 0402 080a  ..........@.....
    0x0030:  0238 5e09 0000 0000 0103 0306            .8^.........
16:37:00.446109 IP 1.164.45.143.telnet > 1.164.45.143.56295: Flags [R.], seq 0, ack 205310206, win 0, length 0
    0x0000:  4500 0028 0000 4000 4006 3c6a 51a4 2d8f  E..(..@.@.<jQ.-.
    0x0010:  51a4 2d8f 0017 dbe7 0000 0000 0c3c c8fe  Q.-..........<..
    0x0020:  5014 0000 0031 0000                      P....1..
16:37:00.446555 IP 1.164.45.143.56296 > 1.164.45.143.telnet: Flags [S], seq 196642802, win 32792, options [mss 16396,sackOK,TS val 37248521 ecr 0,nop,wscale 6], length 0
    0x0000:  4500 003c d9fb 4000 4006 625a 51a4 2d8f  E..<..@.@.bZQ.-.
    0x0010:  51a4 2d8f dbe8 0017 0bb8 87f2 0000 0000  Q.-.............
    0x0020:  a002 8018 fe94 0000 0204 400c 0402 080a  ..........@.....
    0x0030:  0238 5e09 0000 0000 0103 0306            .8^.........
16:37:00.446581 IP 1.164.45.143.telnet > 1.164.45.143.56296: Flags [R.], seq 0, ack 196642803, win 0, length 0
    0x0000:  4500 0028 0000 4000 4006 3c6a 51a4 2d8f  E..(..@.@.<jQ.-.
    0x0010:  51a4 2d8f 0017 dbe8 0000 0000 0bb8 87f3  Q.-.............
    0x0020:  5014 0000 41bf 0000                      P...A...

1 Ответ

2 голосов
/ 15 августа 2011

Лучшее, что вы можете сделать с помощью javascript - это AJAX-запрос с использованием XMLHttpRequest.Если ваш telnet-сервер может обработать кучу мусорных команд, прежде чем он доберется до хорошего, то у вас не будет никаких проблем.Запрос AJAX может подключаться к серверу telnet и отправлять текстовые команды с использованием механизма POST.Сервер telnet сначала получит заголовок HTTP, который он проигнорирует с ошибками «недопустимая команда», прежде чем доберется до ваших действительных команд telnet в теле POST.

var xtel = new XMLHttpRequest();
// replace 123.123.123.123 with the correct IP address
xtel.open("POST", "http://123.123.123.123:23", true);
// you won't be able to get a proper response from the telnet server 
xtel.onreadystatechange = function () {return true;} 
xtel.send("valid command 1" + "\n" + "valid command 2" + "\n");

Это будет похоже на ...

<> telnet 123.123.123.123 23
<> GET / HTTP/1.1
<> ACCEPT: */*
<> HOST: 123.123.123.123
<>
<> valid command 1
<> valid command 2

Однако вышеизложенное является клочком, и вам лучше всего использовать PHP-сокеты http://php.net/manual/en/function.stream-socket-client.php для выполнения соединения и отправки команды.

...