⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pgpnetiphelper.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	$Id: pgpnetIpHelper.c,v 1.5 2002/08/06 20:10:27 dallen Exp $
____________________________________________________________________________*/

#if PGP_WIN32
#include <ndis.h>
#endif

#include "pgpBase.h"

#include "pgpNetIPdef.h"

PGPUInt32 GetIPAddressFromARP(void * block)
{
	PARP_HEADER arp_header;

	arp_header = (PARP_HEADER)block;

	if ( (arp_header->arp_src_ip_addr == arp_header->arp_dst_ip_addr) &&
		arp_header->arp_src_ip_addr != 0L)
		return arp_header->arp_src_ip_addr;
	else
		return 0;
}

PGPBoolean BroadcastEthernetAddress(PGPByte* eth_dstAddress)
{
	int i;
	for (i = 0; i < 6; i ++)
	{
		if (eth_dstAddress[i] != 0xFF)
			return FALSE;
	}

	return TRUE;
}

PGPBoolean EmptyEthernetAddress(PGPByte* eth_address)
{
	int i;
	for (i = 0; i < 6; i ++)
	{
		if (eth_address[i] != 0)
			return FALSE;
	}

	return TRUE;

}

typedef enum
{
	TYPE_IP,
	TYPE_ICMP,
 	TYPE_UDP,
 	TYPE_TCP
} HeadType;

PGPUInt16 HeaderChecksum(PGPUInt16 *header, HeadType type)
{
    PGPUInt16 i = 0;
    PGPUInt32 chksum =0;

	PGPUInt16 headerSize = 0;

	switch (type)
	{
	case TYPE_IP:
		headerSize = sizeof(IP_HEADER);
		break;
	case TYPE_ICMP:
		{
			PICMP_HEADER icmpHeader;
			icmpHeader = (PICMP_HEADER)header;
			if (icmpHeader->icmp_type == 3)
				headerSize = sizeof(TYPE3_ICMP_HEADER);
			else
				headerSize = sizeof(ICMP_HEADER);
		}
		break;
	case TYPE_UDP:
		headerSize = sizeof(UDP_HEADER);
		break;
	case TYPE_TCP:
		//headerSize = sizeof(TCP_HEADER);
		break;
	default:
		return 0;
	}

    while(i++ < headerSize/2)
        chksum += *header++;

    chksum = (chksum >> 16) + (chksum & 0xffff);
    chksum += (chksum >> 16);
    chksum = ~chksum;

    return (PGPUInt16)chksum;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -