基于 TCP 的木马控制通信
TCP 协议是字节流式的传输协议 ,木马通信还需要自定义应用层的协议
被控机器的唯一标识一般是对被控机器的硬盘序列号、MAC 地址等固定信息进行 Hash 计算得到
粘包与分包处理
粘包是指在接收方接收数据时,可能一次接收到多个数据包的数据组成的数据段,也可能收到一个或者几个完整的包与一个后续包的部分数据组成的数据段
TCP粘包产生有两方面原因:一方面,由于TCP协议在客户端和服务器维系一个连接,数据通过连接持续发送。若发送的数据长度过小,会将多个数据包进行合并,然后再进行发送,于是会产生粘包;另外一方面,接收方在收到数据后,先存储在缓冲区中,如果应用没有及时从缓冲区将数据取出,下次取数据的时候就会取到多个包的数据
分包是指接收方接收数据时,每次只能接收到某个数据包的一部分,经过多次接收,才能完整地接收到该协议数据包
产生这种情况的原因是,在数据包长度大于IP协议的MTU值时,IP包会分片传输,导致一个应用数据包最终附加在多个IP报文上通过上面的分析可以看出,粘包和分包1习题的出现,是由于TCP协议的实现机制引起的,与发送方和接收方的发送和接收缓冲区的大小关系不大
对粘包和分包的处理,一般的做法是在要发送的应用层数据包前标识整个数据包的大小,如本节中自定义的协议头。另外一种做法是,在包的末尾添加明显的终结标志 \r\n\r\n,如HTTP协议。由于TCP协议是全双工,这样服务器和客户端都需要进行粘包和分包的处理