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

📄 initval.c

📁 Linux下面截获以态网数据包!是在内核态下面运行的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	for( i = 0; i < _MAX_GTALK_HASH_BUCKET; i ++ )
		kfree( gVar.pGtalkHash[ i ] );
		
	return 0;
}

char FreeGVar( )
{
	int i;
	PWEB_MAIL_CONFIG			pWebMailConfig = NULL;
	PSMTP_HASH_HEAD				pSmtpHashHead;
	PSHORT_DOUBLE_LIST_PACKET	pShortPacket;
	PDOUBLE_LIST_PACKET			pPacket;

	for( i = 0; i < _MAX_CYC_ARRAY_DEPTH; i ++ )
		kfree( gVar.TcpCycArrayHead.PacketArray[ i ] );

	for( i = 0; i < _MAX_CYC_ARRAY_DEPTH; i ++ )
		kfree( gVar.UdpCycArrayHead.PacketArray[ i ] );

	while( gVar.pShortPacketPool->iNumber )
	{
		pShortPacket = (PSHORT_DOUBLE_LIST_PACKET)_RemoveTailList( gVar.pShortPacketPool );
		PutPacketPool( (PDOUBLE_LIST_PACKET)pShortPacket );
	}

	while( gVar.pLongPacketPool->iNumber )
	{
		pPacket = (PDOUBLE_LIST_PACKET)_RemoveTailList( gVar.pLongPacketPool );
		PutPacketPool( pPacket );
	}

	kfree( gVar.pSmtpQueque );
	kfree( gVar.pHttpQueque );
	kfree( gVar.pMsnQueque);
	kfree( gVar.pPop3Queque );
	kfree( gVar.pHttpUrlQueque );
	kfree( gVar.pFtpQueque );
	kfree( gVar.pTelnetQueque );
	kfree( gVar.pYahooQueque );
	kfree( gVar.pIcqQueque );
	kfree( gVar.pIrcQueque);
	kfree( gVar.pAolQueque);
	kfree( gVar.pPpQueque );
	kfree( gVar.pGtalkQueque );
	kfree( gVar.pHashHeadQueque );
	
	pSmtpHashHead = (PSMTP_HASH_HEAD)_RemoveTailListNonLock( gVar.pFileQueque );
	while( gVar.pFileQueque->iNumber )
	{
		FREE_HASHHEAD( pSmtpHashHead );
		pSmtpHashHead = (PSMTP_HASH_HEAD)_RemoveTailListNonLock( gVar.pFileQueque );
	}
	kfree( gVar.pFileQueque );
	
	kfree( gVar.pWebLoginFileQueque );
	kfree( gVar.pWebMailFileQueque );
	kfree( gVar.pBBSFileQueque );
	kfree( gVar.pMsnFileQueque );
	kfree( gVar.pFtpFileQueque );
	kfree( gVar.pTelnetFileQueque );
	kfree( gVar.pIcqFileQueque );
	kfree( gVar.pYahooFileQueque );
	kfree( gVar.pHttpUrlFileQueque );
	kfree( gVar.pPpFileQueque );
	kfree( gVar.pGtalkFileQueque );
	kfree( gVar.pIrcFileQueque );
	
	for( i = 0; i < _MAX_SMTP_HASH_BUCKET; i ++ )
	{
		while( gVar.pSmtpHash[ i ]->iNumber )
		{
			pSmtpHashHead = (PSMTP_HASH_HEAD)_RemoveTailListNonLock( gVar.pSmtpHash[ i ] );
			FREE_HASHHEAD( pSmtpHashHead );
		}

		kfree( gVar.pSmtpHash[ i ] );
	}
		
	for( i = 0; i < _MAX_HTTP_HASH_BUCKET; i ++ )
		kfree( gVar.pHttpHash[ i ] );
	
	for( i = 0; i < _MAX_MSN_HASH_BUCKET; i ++ )
		kfree( gVar.pMsnHash[ i ] );
		
	for( i = 0; i < _MAX_HTTP_POST_BUCKET; i ++ )
		kfree( gVar.pPostHash[ i ] );
		
	for( i = 0; i < _MAX_FTP_HASH_BUCKET; i ++ )
		kfree( gVar.pFtpHash[ i ] );	

	for( i = 0; i < _MAX_TELNET_HASH_BUCKET; i ++ )
		kfree( gVar.pTelnetHash[ i ] );
		
	for( i = 0; i < _MAX_ICQ_HASH_BUCKET; i ++ )
		kfree( gVar.pIcqHash[ i ] );

	for( i = 0; i < _MAX_YAHOO_HASH_BUCKET; i ++ )
		kfree( gVar.pYahooHash[ i ] );
	
	for( i = 0; i < _MAX_IRC_HASH_BUCKET; i ++ )
		kfree( gVar.pIrcHash[ i ] );
	
	for( i = 0; i < _MAX_AOL_HASH_BUCKET; i ++ )
		kfree( gVar.pAolHash[ i ] );
	
	for( i = 0; i < _MAX_PP_HASH_BUCKET; i ++ )
		kfree( gVar.pPpHash[ i ] );
	
	for( i = 0; i < _MAX_GTALK_HASH_BUCKET; i ++ )
		kfree( gVar.pGtalkHash[ i ] );
	
	while( 1 )
	{
		pWebMailConfig = gVar.gWebMailConfig;
		gVar.gWebMailConfig = pWebMailConfig->pNext;
		
		if( gVar.gWebMailConfig ) 
			kfree( pWebMailConfig );
		else
			break;
	}

	if( gVar.shortPacketHeadInfo.pPacketLookside )
		kmem_cache_destroy( gVar.shortPacketHeadInfo.pPacketLookside );

	if( gVar.longPacketHeadInfo.pPacketLookside )
		kmem_cache_destroy( gVar.longPacketHeadInfo.pPacketLookside );

	if( gVar.hashHeadInfo.pHashLookside )
		kmem_cache_destroy( gVar.hashHeadInfo.pHashLookside );
	
	return 1;
}

void FreeDoubleListPool( PDOUBLE_LIST_HEAD pListHead )
{
	PDOUBLE_LIST_ITEM pItem = NULL;
	
	pItem = pListHead->pHead;
	while( pItem )
	{
		pListHead->pHead = pItem->pNext;
		kfree( (PDOUBLE_LIST_PACKET)pItem );
		pItem = pListHead->pHead;
	}		
}

char InitHash()
{
	if( !InitSmtpHash() )
		return 0;
		
	if( !InitHttpHash() )
		return 0;
	
	if( !InitIPHash() )
		return 0;
	
	if( !InitDomainHash() )
		return 0;
	
	if( !InitMsnHash() )
		return 0;	
	
	if( !InitFtpHash() )
		return 0;		
	
	if( !InitTelnetHash() )
		return 0;	
	
	if( !InitIcqHash() )
		return 0;	
	
	if( !InitYahooHash() )
		return 0;		
	
	if( !InitRuleHash() )
		return 0;
	
	if( !InitRuleIPHash() )
		return 0;
	
	if( !InitIrcHash() )
		return 0;		
	
	if( !InitPpHash() )
		return 0;
	
	if( !InitGtalkHash() )
		return 0;	
	
	if( !InitPostHash() )
		return 0;
		
	return 1;
}

char InitIPHash()
{
	UINT	i;

		
	for( i = 0; i<_MAX_IP_HASH_BUCKET; i++ )
	{
		gVar.pIPHash[i] = NULL;
	}
	
	gVar.IPNumber = 0;
	
	return 1;	
}

char InitRuleIPHash()
{
	UINT	i;

	for( i = 0; i < _MAX_RULE_IP_HASH_BUCKET; i ++ )
	{
		gVar.ruleIPHash[ i ].pHead= NULL;
		spin_lock_init( &gVar.ruleIPHash[i].spinLock );
	}
	
	return 1;	
}

char InitDomainHash()
{
	UINT i;
	
	for( i = 0; i < _MAX_DOMAIN_HASH_BUCKET; i ++ )
	{
		gVar.pDomainHash[ i ] = NULL;
	}
	
	gVar.domainNumber = 0;
	
	return 1;	
}

char InitSmtpHash()
{
	UINT i, j;
	
	for( i = 0; i < _MAX_SMTP_HASH_BUCKET; i ++ )
	{
		gVar.pSmtpHash[i] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD), GFP_KERNEL );
			
		if( gVar.pSmtpHash[i] == NULL )
		{
			printk("Allocate gVar.pSmtpHash fail\r\n");
			for( j=0; j<i; j++ )
				kfree( gVar.pSmtpHash[j] );
			return 0;
		}
		_InitializeList( gVar.pSmtpHash[i]);
	}
	
	return 1;
}

char InitHttpHash()
{
	UINT i, j;
	
	
	for( i = 0; i < _MAX_HTTP_HASH_BUCKET; i ++ )
	{
		gVar.pHttpHash[ i ] = NULL;
		gVar.pHttpHash[ i ] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD), GFP_KERNEL);
		
		if( gVar.pHttpHash[i] == NULL )
		{
			printk("Allocate gVar.pHttpHash fail\r\n");
			for( j = 0; j < i; j ++ )
				kfree( gVar.pHttpHash[ j ] );
			
			return 0;
		}
		_InitializeList( gVar.pHttpHash[ i ]);
	}
	
	return 1;
}

char InitRuleHash()
{
	UINT 	i;
	
	for( i = 0; i<MAIL_HASH_LEN; i++ )
	{
		gVar.ruleHash.mail[i].pRule = NULL;
		sema_init( &gVar.ruleHash.mail[ i ].fastMutex, 1 );
	}
	
	for( i = 0; i<MSN_HASH_LEN; i++ )
	{
		gVar.ruleHash.msn[i].pRule = NULL;
		sema_init( &gVar.ruleHash.msn[i].fastMutex, 1 );
	}
	
	for( i = 0; i<QQ_HASH_LEN; i++ )
	{
		gVar.ruleHash.qq[i].pRule = NULL;
		sema_init( &gVar.ruleHash.qq[i].fastMutex, 1 );
	}
	
	for( i = 0; i<ICQ_HASH_LEN; i++ )
	{
		gVar.ruleHash.icq[i].pRule = NULL;
		sema_init( &gVar.ruleHash.icq[i].fastMutex, 1 );
	}
		
	for( i = 0; i<YAHOO_HASH_LEN; i++ )
	{
		gVar.ruleHash.yahoo[i].pRule = NULL;
		sema_init( &gVar.ruleHash.yahoo[i].fastMutex, 1 );
	}
			
	for( i = 0; i<AOL_HASH_LEN; i++ )
	{
		gVar.ruleHash.aol[i].pRule = NULL;
		sema_init( &gVar.ruleHash.aol[i].fastMutex, 1 );
	}
	
	for( i = 0; i<PP_HASH_LEN; i++ )
	{
		gVar.ruleHash.pp[i].pRule = NULL;
		sema_init( &gVar.ruleHash.pp[i].fastMutex, 1 );
	}
		
	for( i = 0; i<IRC_HASH_LEN; i++ )
	{
		gVar.ruleHash.irc[i].pRule = NULL;
		sema_init( &gVar.ruleHash.irc[i].fastMutex, 1 );
	}
		
	for( i = 0; i<GTALK_HASH_LEN; i++ )
	{
		gVar.ruleHash.gtalk[i].pRule = NULL;
		sema_init( &gVar.ruleHash.gtalk[i].fastMutex, 1 );
	}
			
	return 1;
}

char InitMsnHash()
{
	UINT 	i, j;
	
	
	for( i = 0; i<_MAX_MSN_HASH_BUCKET; i++ )
	{
		gVar.pMsnHash[i] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD), GFP_KERNEL );
			
		if( gVar.pMsnHash[i] == NULL )
		{
			printk("Allocate gVar.pHttpHash fail\r\n");
			
			for( j = 0; j < i; j ++ )
				kfree( gVar.pMsnHash[j] );
			
			return 0;
		}
		_InitializeList( gVar.pMsnHash[i]);
	}
	
	return 1;
}

char InitPostHash()
{
	UINT 	i, j;
	
	
	for( i = 0; i<_MAX_HTTP_POST_BUCKET; i++ )
	{
		gVar.pPostHash[ i ] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD), GFP_KERNEL );
			
		if( gVar.pPostHash[ i ] == NULL )
		{
			printk( "Allocate gVar.pPostHash fail\r\n" );
			
			for( j = 0; j < i; j ++ )
				kfree( gVar.pPostHash[ j ] );
			
			return 0;
		}
		_InitializeList( gVar.pPostHash[ i ]);
	}
	
	return 1;
}

char InitFtpHash()
{
	UINT	i, j;
	
	
	for( i = 0; i < _MAX_FTP_HASH_BUCKET; i ++ )
	{
		gVar.pFtpHash[ i ] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD), GFP_KERNEL );
		
		if( gVar.pFtpHash[i] == NULL )
		{
			printk("Allocate gVar.pHttpHash fail\r\n");
			for( j=0; j<i; j++ )
				kfree( gVar.pFtpHash[j] );
			return 0;
		}
		_InitializeList( gVar.pFtpHash[i]);
	}
	
	return 1;
}

char InitTelnetHash()
{
	UINT	i, j;
	
	
	for( i = 0; i<_MAX_TELNET_HASH_BUCKET; i++ )
	{
		gVar.pTelnetHash[i] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD), GFP_KERNEL );
		
		if( gVar.pTelnetHash[i] == NULL )
		{
			printk("Allocate gVar.pHttpHash fail\r\n");
			
			for( j = 0; j < i; j ++ )
				kfree( gVar.pTelnetHash[j] );
			return 0;
		}
		_InitializeList( gVar.pTelnetHash[i]);
	}
	
	return 1;
}

char InitIcqHash()
{
	UINT	i, j;
	
	
	for( i = 0; i<_MAX_ICQ_HASH_BUCKET; i++ )
	{
		gVar.pIcqHash[i] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD), GFP_KERNEL );
		if( gVar.pIcqHash[i] == NULL )
		{
			printk("Allocate gVar.pHttpHash fail\r\n");
			
			for( j=0; j<i; j++ )
				kfree( gVar.pIcqHash[ j ] );
			
			return 0;
		}
		_InitializeList( gVar.pIcqHash[i]);
	}
	
	return 1;
}

char InitIrcHash()
{
	UINT	i, j;
	
	
	for( i = 0; i<_MAX_IRC_HASH_BUCKET; i++ )
	{
		gVar.pIrcHash[i] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD),
			GFP_KERNEL );
		if( gVar.pIrcHash[i] == NULL )
		{
			printk("Allocate gVar.pHttpHash fail\r\n");
			for( j = 0; j < i; j ++ )
				kfree( gVar.pIrcHash[j] );
			return 0;
		}
		_InitializeList( gVar.pIrcHash[i]);
	}
	
	return 1;
}


char InitPpHash()
{
	UINT i, j;
	
	
	for( i = 0; i<_MAX_PP_HASH_BUCKET; i++ )
	{
		gVar.pPpHash[i] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD), GFP_KERNEL );
		
		if( gVar.pPpHash[i] == NULL )
		{
			printk("Allocate gVar.pHttpHash fail\r\n");
			for( j=0; j<i; j++ )
				kfree( gVar.pPpHash[j] );
			return 0;
		}
		
		_InitializeList( gVar.pPpHash[i]);
	}
	
	return 1;
}

char InitGtalkHash()
{
	UINT	i, j;
	
	
	for( i = 0; i<_MAX_GTALK_HASH_BUCKET; i++ )
	{
		gVar.pGtalkHash[i] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD), GFP_KERNEL );
			
		if( gVar.pGtalkHash[i] == NULL )
		{
			printk("Allocate gVar.pHttpHash fail\r\n");
			for( j = 0; j<i; j++ )
				kfree( gVar.pGtalkHash[j] );
			return 0;
		}
		_InitializeList( gVar.pGtalkHash[i]);
	}
	
	return 1;
}

char InitYahooHash()
{
	UINT 	i, j;
	
	
	for( i = 0; i<_MAX_YAHOO_HASH_BUCKET; i++ )
	{
		gVar.pYahooHash[i] = (PDOUBLE_LIST_HEAD)kmalloc( sizeof(DOUBLE_LIST_HEAD),
			GFP_KERNEL );
			
		if( gVar.pYahooHash[i] == NULL )
		{
			printk("Allocate gVar.pHttpHash fail\r\n");
			for( j=0; j<i; j++ )
				kfree( gVar.pYahooHash[j] );
			return 0;
		}
		_InitializeList( gVar.pYahooHash[i]);
	}
	
	return 1;
}

⌨️ 快捷键说明

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