上篇说到旁路劫持的原理与实现,主要还是针对TCP下HTTP服务而言的,有粉儿问了二个问题,一个问题是基于TCP的HTTP服务可以防劫持吗,网上有许多关于HTTP防劫持的办法,有说检测服务地址的,有说分片传输请求的,有说检测ttl值异常的,有说禁止重定向的,结论是都没用,伪造报文里网络层地址原本就是用户的目标地址,否则还叫什么伪造呢,请求报文分片web端能识别劫持设备就能识别,况且你确定你分片的报文在网络设备层发送前不会合并吗,ttl异常检测完全不靠谱,不用重定向200OK照样让你乖乖跳转;另一个问题是UDP能实现旁路劫持控制吗,结论是可以,UDP不同于TCP无连接无状态,只要数据合法先到先得,早年运营商控制P2P数据传输对带宽的占用就使用过类似方法,直接看代码吧不复杂。
DNS协议
// 0 1--4 05 06 07 08 9-11 12-15
// +----+--------+----+----+----+----+--------+-------+
// | QR | opcode | AA | TC | RD | RA | | rcode |
// +----+--------+----+----+----+----+--------+-------+
// +--------------------------------+
// | DNS Header: ID + flags |
// +--------------------------------+
// | Question: type of query |
// +--------------------------------+
// | Answer: RR answer to query |
// +--------------------------------+
// | Authority: RR for name server |
// +--------------------------------+
// | Additional: RR(s) other info |
// +--------------------------------+
DNS解析
void GtDnsParse(UCHAR* puszPacket, GTDNSHEADER_S* pstHead, GTDNSQUESTION_S* pstQues)
{
UCHAR* puszCur = puszPacket;
/* dns header */
memcpy(&pstHead->m_us