
最近在捕获和记录数据包的情况下,通过tcpdump捕获软件包后分析软件包文件,并解析出软件包中的视频和其他文件信息. 首先ts 文件解析,让我们做最简单的部分,分析多播流的数据包捕获视频.

TS数据包由4B报头ts 文件解析,可变长度调整报头和有效载荷组成;

标头结构定义如下:

struct ts_header{
char syn_byte:8; // 包头同步字节,0x47
char transport_error_indicator:1; //传送数据包差错指示器
char payload_unit_start_indicator:1; //有效净荷单元开始指示器
char transport_priority:1; //传送优先级
int PID:13; //包ID
char transport_scrambling_control:2; //传送加扰控制
char adaptation_field_control:2; //调整字段控制
char continuity_conunter:4; //连续计数器 0-15
}

syn_byte位用于标识TS流. 47个连续的字节之间的间隔为188,并且有3个以上的连续字节,则此流为TS,原始二进制文件可以字节为单位写入. 进入空白的ts文件.
// 判断 连续 三个71 中间间隔是否 187
func isTs(p *[]byte) bool{
var (
num int // 包含连续 71的个数
)
for index,value :=range *p{
if value!=71 {
continue
}
lastindex:=index
for {
ni:=lastindex+188
if (len(*p)-1)<ni {
return false
}
if (*p)[ni]!=71 {
break
}
num++
if num>=3 {
return true
}
lastindex=ni
}
}
return false
}
在上面的代码中使用71的原因是将47转换为十进制是71. 识别ts流之后,可以将当前包的有效负载保存在文件中,并最终生成TS文件. 这样就完成了TS流. 捕获视频文件以进行视频还原.
Golang通过pcap文件解析TS流并恢复TS video-WEB地平线webkk.net
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-165373-1.html
不要大意
#给烊烊520#1128生日评论