- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IPSEC实验代码
#include sysinclude.h
extern struct ipsecSpdHeader *g_ipsec_spd_in;
extern struct ipsecSpdHeader *g_ipsec_spd_out;
extern void ipsec_Receive_process(char *pBuffer,int dwLen);
extern void ipsec_Send_process(char *pBuffer, int iLen);
extern AH_ALGORITHM *ahAlgorithmLookup(UCHAR algAuth);
extern ESP_ALGORITHM *espAlgorithmLookup(UCHAR algEncry);
extern int ah4CalculateICV(UCHAR *pPacketCpy, unsigned short totalLen,UCHAR *pOutput, const AH_ALGORITHM *pAlg,IPSEC_ASSOC *pSA);
extern int espAuthCalculate(UCHAR *pData,unsigned short dataLen,UCHAR *pOutput,AH_ALGORITHM *pAlg,IPSEC_ASSOC *pSA);
// ethernet头长度为14
// IPsec头长度为20
const int IPSEC_HEAD_LEN = sizeof(IPSEC_HEAD); // 20
// AH长度为24
const int IPSEC_AH_LEN = 24;
// AH的头长度为12
const int IPSEC_AH_HEAD_LEN = sizeof(IPSEC_AH); // 12
bool isESP = false;
// 计算校验和
UINT16 checkSum(IPSEC_HEAD * pHead){
UINT32 checksum = 0;
checksum += (UINT32)((pHead-verlen) 8); // 8
checksum += (UINT32)(pHead-tos); // 8
checksum += (UINT32)(ntohs(pHead-tot_len)); // 16
checksum += (UINT32)(ntohs(pHead-id)); // 16
checksum += (UINT32)(ntohs(pHead-frag_off)); // 16
checksum += (UINT32)((pHead-ttl) 8); // 8
checksum += (UINT32)(pHead-protocol); // 8
checksum += (UINT32)(ntohl(pHead-saddr) 16); // 16
checksum += (UINT32)(ntohl(pHead-saddr) 0xFFFF); // 16
checksum += (UINT32)(ntohl(pHead-daddr) 16); // 16
checksum += (UINT32)(ntohl(pHead-daddr) 0xFFFF); // 16
while (checksum 16) {
checksum = (checksum 0xFFFF) + (checksum 16);
}
checksum = ~checksum;
return (UINT16) checksum;
}
// 在SPD里面查找相应的SP
// 按照报文源地址、目的地址和上层协议号查找与之匹配的SP
IPSEC_POLICY_SELECTOR * getSP(u_long srcAddr, u_long dstAddr, IPSEC_POLICY_SELECTOR *spd, bool isESP) {
IPSEC_POLICY_SELECTOR * p = spd;
while (p != NULL) {
if (((p-srcAddr p-srcPref) == (srcAddr p-srcPref))
((p-dstAddr p-dstPref) == (dstAddr p-dstPref))) {
if (isESP p-sa-proto != IPSEC_PROTO_ESP) {
p = p-next;
continue;
}
break;
您可能关注的文档
- 2009山东一本一志愿投档表.doc
- 2009年,中国白酒往那走.doc
- 2009年新年祝福短信集锦.doc
- 2009年高考考前成语专题归类积累材料(二).doc
- 200常识.doc
- 2010年6月英语六级真题—B卷完整答案.doc
- 2010年上海世博会3日自助游全攻略,省钱、省时间!和我一样,来一场和上海的三天恋爱.doc
- 2008年大陆奢侈品城市排行.doc
- 2010年千里共良宵每日主题.doc
- 2010年咨询师《现代咨询方法与实务》强化练习题.doc
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)