function radiotest(host,port)
local rstr="Online"
local sock, err = socket.tcp()
if not sock then
return "Failed"
end
sock:settimeout(1)
local res, err = sock:connect(host, port)
if not res then
return "offline"
else
sock:settimeout(1)
sock:send("GET /index.html HTTP/1.0\r\n UserAgent: SHOUTcast Song Status \r\n Accept: */*\r\n\r\n")
sock:settimeout(3)
local data=sock:receive('*a')
sock:close()
print(data)
-- Further processing content here
end
end
print( radiotest( "10.*.*.*", 1234 ) )
上面的套接字连接让我回复:
ICY 404 Resource Not Found
icy-notice1:<BR>SHOUTcast Distributed Network Audio Server/win32 v1.9.7<BR>
icy-notice2:The resource requested was not found<BR>
我认为问题出在我的标题列表中,但我无法追踪它。
该页面在所有浏览器中都可以正常打开(Opera需要被屏蔽为另一个浏览器;否则它会继续下载所有歌曲。)
我尝试在sock:send()
GET /index.html HTTP/1.0\r\n UserAgent: SHOUTcast Song Status (Mozilla Compatible)\r\n\r\n
GET /index.html HTTP/1.0\r\n UserAgent: Opera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.12\r\n\r\n
GET /index.html HTTP/1.0\r\n UserAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\r\n\r\n
我完全被这部分困住了。如何使用socket.tcp()
答案 0 :(得分:2)
在查看您的数据包捕获后,似乎实际通过网络发送的内容是错误的。你的用户代理字符串没有成功:
> GET /index.html HTTP/1.0
< ICY 404 Resource Not Found
< icy-notice1:<BR>SHOUTcast Distributed Network Audio Server/win32 v1.9.7<BR>
< icy-notice2:The resource requested was not found<BR>
如果您未指定包含Mozilla
的用户代理,您将无法访问管理界面或其任何部分。返回并再次检查您发送的代码。
答案 1 :(得分:0)
@Brad谢谢。你对Wireshark的帮助确实切实可行。 User-Agent
标头未被传递到服务器,因为我在请求中提供了额外的空间。
sock:send("GET /index.html HTTP/1.0\r\n UserAgent: SHOUTcast Song Status \r\n Accept: */*\r\n\r\n")
\r\n UserAgent: SHOUTcast Song Status
应改为:
\r\nUser-Agent: SHOUTcast Song Status
现在工作正常。
感谢您的帮助。 :d
过滤HTML后该函数的结果如下:
在线(Tonic - 如果你只能看到)
在线(Tonic - 如果你只能看到)流量达到256 kbps,32个听众中有0个(0个唯一)