【问题标题】:How to connect from local web browser to remote telnet server and send predefined commands?如何从本地 Web 浏览器连接到远程 telnet 服务器并发送预定义的命令?
【发布时间】:2011-10-27 06:35:26
【问题描述】:

我有一个使用 php/javascript 运行的呼叫中心应用程序。当操作员使用 Firefox/Chrome/Opera/Internet Explorer 等 Web 浏览器在他的 mac、windows 或 linux 中时。我需要与远程服务器建立实时连接,以发送诸如“拨打电话”之类的命令。

但是我怎样才能使用 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...

【问题讨论】:

标签: php javascript jquery dojo mootools


【解决方案1】:

你可以用 javascript 做的最好的事情是使用 XMLHttpRequest 的 AJAX 请求。如果您的 telnet 服务器可以在处理好一堆垃圾命令之前处理好一堆垃圾命令,那么您将没有问题。 AJAX 请求可以连接到 telnet 服务器并使用 POST 机制发送纯文本命令。 telnet 服务器将首先接收 HTTP 标头,在到达 POST 正文中的有效 telnet 命令之前,它将忽略“无效命令”错误。

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 来执行连接并发送命令。

【讨论】:

  • 我已经试过你上面的例子来使用 nc -l 23 抓取原始数据,但我没有收到任何东西。
  • # tcpdump 'port 23' 这也没有得到任何东西。
  • 运行 javascript 的客户端机器是否可以访问这些 telnet 服务器(防火墙/路由)?
  • 似乎 SYN/ACK 数据包来回发送。两件事:您是否能够使用 telnet 客户端建立连接?当我们谈论 telnet 时,我们是在谈论纯文本 TCP 协议还是具有加密功能的东西?
  • 纯文本 TCP 协议。获取原始数据包。无论如何,您的示例仅在我使用 Chrome 触发/执行时向我展示。但不适用于 Firefox/Opera/Safari/Midori/ETc。等等。
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多