TSG-8345,修复协议为mail和ftp没有发送icmp不可达报文
TSG-8403,修复命中策略tamper后无法阻隔sip报文
This commit is contained in:
@@ -32,28 +32,17 @@
|
||||
#define IPV6_UDP_PALYLOAD_START_INDEX 48 //ipv6_len(40) + udp_len(8)
|
||||
#define IPV6_IP_PAYLOAD_INDEX 4 //ipv6_payload_index(4)
|
||||
|
||||
|
||||
int tamper_calc(const struct streaminfo *a_stream, char *str, int endlen)
|
||||
int tamper_calc(char *str, int endlen)
|
||||
{
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
char temp;
|
||||
int startlen = 0;
|
||||
int data_len = a_stream->ptcpdetail->datalen; //tcp和udp结构体内容一样,取tcp的datalen即可
|
||||
|
||||
|
||||
//判断是否需要偏移一个字节
|
||||
if(data_len%2!=0){
|
||||
startlen = 1;
|
||||
}
|
||||
|
||||
//最小交换paythod的第2个字节和第四个字节,否则不处理
|
||||
if ((endlen - startlen) < 4){
|
||||
if(endlen<4){ //最少满足2个16bit的长度,即最小4字节。
|
||||
return 0;
|
||||
}
|
||||
|
||||
//start_len+1 : 因为计算校验和是16bit为单位,这里调换16bit的低8bit。
|
||||
for(i=startlen+1; i<endlen; i=i+2){
|
||||
for(i=1; i<endlen; i=i+2){
|
||||
for (j=i+2; j<endlen; j=j+2){
|
||||
if(str[i] != str[j]){
|
||||
temp = str[i];
|
||||
@@ -79,18 +68,20 @@ unsigned char send_tamper_xxx(const struct streaminfo *a_stream, const void *raw
|
||||
|
||||
p_trans_payload = (char *)a_stream->ptcpdetail->pdata;
|
||||
trans_layload_len = a_stream->ptcpdetail->datalen;
|
||||
if((p_trans_payload==NULL)||(trans_layload_len<=0)){
|
||||
if((p_trans_payload==NULL)||(trans_layload_len<=4)){
|
||||
return STATE_GIVEME;
|
||||
}
|
||||
|
||||
memcpy(tamper_buf, p_trans_payload, trans_layload_len);
|
||||
ret = tamper_calc(a_stream, tamper_buf, trans_layload_len);
|
||||
MESA_handle_runtime_log(g_tsg_para.logger,
|
||||
RLOG_LV_DEBUG,
|
||||
__FUNCTION__,
|
||||
"Modify the index position of the payload: %d",
|
||||
ret);
|
||||
ret = tamper_calc(tamper_buf, trans_layload_len);
|
||||
if(ret > 0){
|
||||
MESA_handle_runtime_log(g_tsg_para.logger,
|
||||
RLOG_LV_DEBUG,
|
||||
__FUNCTION__,
|
||||
"Modify the index(%d) position of the payload:(old: %x %x %x %x, new: %x %x %x %x)",
|
||||
ret,
|
||||
p_trans_payload[ret-1],p_trans_payload[ret],p_trans_payload[ret+1], p_trans_payload[ret+2],
|
||||
tamper_buf[ret-1], tamper_buf[ret], tamper_buf[ret+1], tamper_buf[ret+2]);
|
||||
ret=tsg_send_inject_packet(a_stream, SIO_DEFAULT, tamper_buf, trans_layload_len, a_stream->routedir);
|
||||
if(ret == 0){
|
||||
return STATE_DROPPKT;
|
||||
|
||||
Reference in New Issue
Block a user