使用telnet“连接由外部主机关闭”的Bash脚本

时间:2013-08-16 12:26:50

标签: bash telnet

我有一个bash脚本应该与我的Sky + HD盒连接并暂停它。这是一个盒子支持的服务,因为它与iPhone / iPad应用程序的协议相同。

为什么它不会保持连接有什么明显的明显之处?

    (echo 'POST /SkyPlay2 HTTP/1.1
SOAPACTION: "urn:schemas-nds-com:service:SkyPlay:2#SetAVTransportURI"
Content-Type: text/xml; charset=utf-8
Content-Length: 399 

<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-nds-com:service:SkyPlay:2"><InstanceID>0</InstanceID><CurrentURI>xsi://'$line'</CurrentURI><CurrentURIMetaData>NOT_IMPLEMENTED</CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>') | telnet 192.168.1.82 49153

1 个答案:

答案 0 :(得分:0)

您的信箱可能具有访问权限限制,使其无法与正在运行该脚本的计算机建立连接。

作为一般建议:

  1. 引用$line以防止发生令人讨厌的事情,例如:echo 'foo'"$list"'bar'(注意双引号);
  2. 而不是telnet,这意味着更多用于交互式使用,请使用nc(netcat):echo 'stuff' | nc -n 192.168.1.82 49153;这可能有助于解决您的连接问题,如果您的telnet试图变得聪明并且在发送数据之前确认了telnet协议特定参数;
  3. 由于您只使用一个命令echo来发送数据,因此您无需在子shell中运行它,因此不需要括号( ); < / LI>
  4. 如果要输出多行,请考虑使用cat <<EOF而不是echo(在bash手册中查看此处 - 文档)