如何使用Wireshark实时(即连续地,不是从捕获文件中)提取字符串,例如:
StreamTitle='The Rolling Stones - Black Box [Disc 3] (1970) - Bitch';
来自网络音频流(例如http://50.7.76.250:8757/stream),并将此字符串附加到文件中?
我要做的是从这个网络音频流中制作一个实时播放列表,以便在网站上发布。
我第一次尝试做我想要的是在CentOS 6上编译VLC Media Player的源代码,所以我可以根据他们的New Title=
调试语句简单地写出相应的字符串(例如{{1} }})到一个文件。不幸的是我无法获得编译的源代码。
未能在CentOS下编译VLC Media Player后,我转而使用Wireshark检查TCP流。使用查找,我可以从捕获的数据包中找到'Van Morrison - Born To Sing: No Plan B (2012) - Retreat and View'
信息,但我无法弄清楚如何提取 - &实时,持续地保存它(例如,24x7)。
ETA:我知道Perl和C,如果我必须编写代码来执行此操作。
更新:我最终学习了足够的Lua来编写VLC脚本并得到我需要的东西:
StreamTitle=
答案 0 :(得分:1)
您正在查看的是具有SHOUTcast风格(通常称为ICY)元数据复用的流。据我所知,没有Wireshark过滤器可以对此进行解复用。但问题甚至比这更简单。
定期插入元数据。你甚至不需要VLC来剥离它。如果查看响应标头,您将看到一个名为Icy-MetaInt
的响应标头。这是元数据块的间隔(以字节为单位)。元数据块中的第一个字节是元数据块的长度除以16.元数据块然后用空字节填充。
例如,假设元间隔为8192
字节...
[8192 bytes of audio][1 byte meta length][meta block][8192 bytes of audio][etc...]
只需读取音频后的第一个字节,乘以16,然后从元数据块的流中读取那么多字节。切掉它末尾的空字节,你就有了数据。
更简单的是,StreamRipper输出其STDERR流上的元数据。你可以把它传播到一个脚本中。
有关详情,请参阅我的回答:https://stackoverflow.com/a/4914538/362536