?? packet.cpp
字號:
/**
* 包構造模塊
*/
#include "stdafx.h"
#include <stdio.h>
#include "crypt.h"
#include "md5.h"
#include <stdlib.h>
#include <string.h>
#include "options.h"
/**
* 在數據流當前位置(p)開始增加一個 (type,len,data) 三元組
*
* 返回指向下一個位置的指針
*/
static inline unsigned char *add_item(unsigned char *p,unsigned char type,void *buf,int len)
{
*p++ = type;
*p++ = 2 + len;
memcpy(p,buf,len);
p+=len;
return p;
}
/**
* 構造一個 ping 協議報文
*
* @param size packet 緩沖區長度
* @return 返回構造出的報文長度
* @note 未檢查是否構造越過 packet 邊界
*/
int packet_ping(unsigned char *packet,int size)
{
unsigned char *p;
p = packet;
*p++ = 3;
p += 16 + 1;
p = add_item(p,7,g_options.my_mac,sizeof(g_options.my_mac));
p = add_item(p,8,g_options.session,g_options.sesslen);
p = add_item(p,9,(void*)g_options.my_ip,strlen(g_options.my_ip));
size = p - packet;
p = packet + 1;
*p++ = size;
memset(p,0,16);
MD5(p,packet,size);
encrypt(packet,size);
return size;
}
/**
* 構造一個 login 協議報文
*
* @param size packet 緩沖區長度
* @return 返回構造出的報文長度
* @note 未檢查是否構造越過 packet 邊界
*/
int packet_login(unsigned char *packet,int size)
{
unsigned char c = 1;
unsigned char *p;
p = packet;
*p++ = 1;
p += 16 + 1;
p = add_item(p,1,(void*)g_options.username,strlen(g_options.username));
p = add_item(p,2,(void*)g_options.password,strlen(g_options.password));
p = add_item(p,7,(void*)g_options.my_mac,sizeof(g_options.my_mac));
p = add_item(p,9,(void*)g_options.my_ip,strlen(g_options.my_ip));
p = add_item(p,0x0A,(void*)g_options.services,strlen(g_options.services));
p = add_item(p,0x1F,(void*)g_options.version,strlen(g_options.version));
p = add_item(p,0x20,(void*)&c,1);
size = p - packet;
p = packet + 1;
*p++ = size;
memset(p,0,16);
MD5(p,packet,size);
encrypt(packet,size);
return size;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -