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

📄 createdir.c

📁 Linux下面截获以态网数据包!是在内核态下面运行的驱动程序
💻 C
字号:
#include <linux/module.h> 
#include <linux/config.h> 
#include <linux/init.h> 
#include <linux/netdevice.h> 		/* for dev_base */
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/file.h>
#include <linux/dnotify.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <linux/time.h>
#include <linux/vmalloc.h>
#include <asm/semaphore.h>
#include <asm/unistd.h>

#include "createDir.h"
#include "DomainIPHash.h"
#include "list.h"
#include "Rule.h"
#include "RuleIp.h"
#include "protocol.h"
#include "function.h"

const char Days[ 12 ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

void CreateDirByTime( struct timeval* dir_time );
void localtime( time_t time, long timezone, struct tm *tm_time );

extern GVAR gVar;

int CreateDir( void *arg )
{
	int i;
	struct timeval current_time;
	PTHREAD_CONTROL	pControl = (PTHREAD_CONTROL)arg;

	//创建前20分钟目录
	do_gettimeofday( &current_time );

	current_time.tv_sec += 60;
	for( i = 0; i < 2; i ++ )
	{	
		CreateDirByTime( &current_time );
		current_time.tv_sec -= 60;
	}

	//每一分钟创建一个目录
	daemonize( "create_dir" );
	allow_signal( SIGTERM );	
	while( !signal_pending( current ) )
	{
		set_current_state( TASK_INTERRUPTIBLE );
		schedule_timeout( 20 * 3000 );

		do_gettimeofday( &current_time );
		current_time.tv_sec += 60;
		CreateDirByTime( &current_time);
	}

	complete_and_exit( &(pControl->thread_exited), 1 );

	return 0;
}


void CreateDirByTime( struct timeval* dir_time )
{
	char		dir[ _MAX_DIR_LENGTH ];
	struct tm	local;
	int			i;

	memset( dir, 0, _MAX_DIR_LENGTH );
	localtime( dir_time->tv_sec, 3600 * 8, &local );

	for( i = 0; i < gVar.Smtppop3PathNumber; i ++ )
	{
		sprintf( dir, "%s%d%02d%02d", gVar.Smtppop3Path[ i ], local.tm_year,
			local.tm_mon, local.tm_mday );
		mkdir( dir , 0755 );
		
		//create YYYYMMDD\hh
		sprintf( dir, "%s%d%02d%02d/%02d", gVar.Smtppop3Path[ i ], local.tm_year,
			local.tm_mon, local.tm_mday, local.tm_hour );
		mkdir( dir , 0755 );
		
		//create YYYYMMDD\hh\mm
		sprintf( dir,  "%s%d%02d%02d/%02d/%02d", gVar.Smtppop3Path[ i ], local.tm_year,
			local.tm_mon, local.tm_mday, local.tm_hour, local.tm_min );
		mkdir( dir , 0755 );
	}
/*
	for( i = 0; i < gVar.WebMailPathNumber; i ++ )
	{
		//create  WEB_MAIL_SEND_CON YYYYMMDD
		sprintf( dir, "%s%s/%d%02d%02d", gVar.WebMailPath[i], WEB_MAIL_SEND_CON, 
			local.tm_year, local.tm_mon, local.tm_mday );
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh
		sprintf( dir, "%s%s/%d%02d%02d/%02d", gVar.WebMailPath[i], WEB_MAIL_SEND_CON,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour );
		mkdir( dir , 0755 );
		
		//create YYYYMMDD\hh\mm
		sprintf( dir, "%s%s/%d%02d%02d/%02d/%02d", gVar.WebMailPath[i], WEB_MAIL_SEND_CON,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour, local.tm_min );
		mkdir( dir , 0755 );
		
		//create  WEB_MAIL_RECEIVE_CON YYYYMMDD
		sprintf( dir, "%s%s/%d%02d%02d", gVar.WebMailPath[i], WEB_MAIL_RECEIVE_CON, 
			local.tm_year, local.tm_mon, local.tm_mday );
		mkdir( dir , 0755 );
		
		//create YYYYMMDD\hh
		sprintf( dir, "%s%s/%d%02d%02d/%02d", gVar.WebMailPath[i], WEB_MAIL_RECEIVE_CON,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour );
		mkdir( dir , 0755 );
		
		//create YYYYMMDD\hh\mm
		sprintf( dir, "%s%s/%d%02d%02d/%02d/%02d", gVar.WebMailPath[i],WEB_MAIL_RECEIVE_CON,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour, local.tm_min );
		mkdir( dir , 0755 );
		
		//create  WEB_MAIL_ATTACH YYYYMMDD
		sprintf( dir, "%s%s/%d%02d%02d", gVar.WebMailPath[ i ], WEB_MAIL_ATTACH,
			local.tm_year,local.tm_mon, local.tm_mday);
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh
		sprintf( dir, "%s%s/%d%02d%02d/%02d", gVar.WebMailPath[i], WEB_MAIL_ATTACH,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour);
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh\mm
		sprintf( dir, "%s%s/%d%02d%02d/%02d/%02d", gVar.WebMailPath[ i ], WEB_MAIL_ATTACH,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour, local.tm_min );
		mkdir( dir , 0755 );
		
		//create  WEB_MAIL_ADDLIST YYYYMMDD
		sprintf( dir, "%s%s/%d%02d%02d", gVar.WebMailPath[i], WEB_MAIL_ADD_LIST,
			local.tm_year, local.tm_mon, local.tm_mday );
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh
		sprintf( dir, "%s%s/%d%02d%02d/%02d", gVar.WebMailPath[i], WEB_MAIL_ADD_LIST,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour );
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh\mm
		sprintf( dir, "%s%s/%d%02d%02d/%02d/%02d", gVar.WebMailPath[ i ], WEB_MAIL_ADD_LIST,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour, local.tm_min );
		mkdir( dir , 0755 );
		
		//create  WEB_MAIL_ADDLIST YYYYMMDD
		sprintf( dir, "%s%s/%d%02d%02d", gVar.WebMailPath[i], BBS_SEND,
			local.tm_year, local.tm_mon, local.tm_mday );
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh
		sprintf( dir, "%s%s/%d%02d%02d/%02d", gVar.WebMailPath[i], BBS_SEND,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour );
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh\mm
		sprintf( dir, "%s%s/%d%02d%02d/%02d/%02d", gVar.WebMailPath[i], BBS_SEND,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour, local.tm_min );
		mkdir( dir , 0755 );
		
		//create  WEB_MAIL_ADDLIST YYYYMMDD
		sprintf( dir, "%s%s/%d%02d%02d", gVar.WebMailPath[i], BBS_RECEIVE,
			local.tm_year, local.tm_mon, local.tm_mday );
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh
		sprintf( dir, "%s%s/%d%02d%02d/%02d", gVar.WebMailPath[i], BBS_RECEIVE,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour );
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh\mm
		sprintf( dir, "%s%s/%d%02d%02d/%02d/%02d", gVar.WebMailPath[i], BBS_RECEIVE,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour, local.tm_min );
		mkdir( dir , 0755 );
		
		//create  WEB_POST YYYYMMDD
		sprintf( dir, "%s%s/%d%02d%02d", gVar.WebMailPath[i], WEB_POST, 
			local.tm_year, local.tm_mon, local.tm_mday );
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh
		sprintf( dir, "%s%s/%d%02d%02d/%02d", gVar.WebMailPath[i], WEB_POST,
			local.tm_year, local.tm_mon, local.tm_mday, local.tm_hour );
		mkdir( dir , 0755 );
	}

	for( i = 0; i < gVar.MsnPathNumber; i ++ )
	{
		//create  MSN  YYYYMMDD
		sprintf( dir, "%s%d%02d%02d", gVar.MsnPath[i], local.tm_year,local.tm_mon, local.tm_mday);
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh
		sprintf( dir, "%s%d%02d%02d/%02d", gVar.MsnPath[i], local.tm_year, 
			local.tm_mon, local.tm_mday, local.tm_hour );
		mkdir( dir , 0755 );

		//create YYYYMMDD\hh\mm
		sprintf( dir, "%s%d%02d%02d/%02d/%02d", gVar.MsnPath[i], local.tm_year,
			local.tm_mon, local.tm_mday, local.tm_hour, local.tm_min );
		mkdir( dir , 0755 );		
	}

	for( i = 0; i < gVar.FtpPathNumber; i ++ )
	{
		//create  IM LOG  YYYYMMDD
		sprintf( dir, "%s%d%02d%02d", gVar.FtpPath[i], local.tm_year, local.tm_mon, local.tm_mday );
		mkdir( dir , 0755 );		
	}

	for( i = 0; i < gVar.TelnetPathNumber; i ++ )
	{
		//create  IM LOG  YYYYMMDD
		sprintf( dir,  "%s%d%02d%02d", gVar.TelnetPath[i], local.tm_year,local.tm_mon, local.tm_mday);
		mkdir( dir , 0755 );
	}

	for( i = 0; i < gVar.HttpUrlPathNumber; i ++ )
	{
		//create  IM LOG  YYYYMMDD
		sprintf( dir,  "%s%d%02d%02d", gVar.HttpUrlPath[i], local.tm_year,local.tm_mon, local.tm_mday);
		mkdir( dir , 0755 );
	}

	for( i = 0; i < gVar.IcqPathNumber; i ++ )
	{
		//create  MSN  YYYYMMDD
		sprintf( dir,  "%s%d%02d%02d", gVar.IcqPath[i], local.tm_year,local.tm_mon, local.tm_mday);
		mkdir( dir , 0755 );
		//create YYYYMMDD\hh
		sprintf( dir,  "%s%d%02d%02d/%02d", gVar.IcqPath[i],local.tm_year,local.tm_mon, local.tm_mday,local.tm_hour);
		mkdir( dir , 0755 );
		//create YYYYMMDD\hh\mm
		sprintf( dir,  "%s%d%02d%02d/%02d/%02d", gVar.IcqPath[i],local.tm_year,local.tm_mon, local.tm_mday,local.tm_hour,local.tm_min);
		mkdir( dir , 0755 );
	}

	for( i = 0; i < gVar.YahooPathNumber; i ++ )
	{
		//create  MSN  YYYYMMDD
		sprintf( dir,  "%s%d%02d%02d", gVar.YahooPath[i], local.tm_year,local.tm_mon, local.tm_mday);
		mkdir( dir , 0755 );
		//create YYYYMMDD\hh
		sprintf( dir,  "%s%d%02d%02d/%02d", gVar.YahooPath[i],local.tm_year,local.tm_mon, local.tm_mday,local.tm_hour);
		mkdir( dir , 0755 );
		//create YYYYMMDD\hh\mm
		sprintf( dir,  "%s%d%02d%02d/%02d/%02d", gVar.YahooPath[i],local.tm_year,local.tm_mon, local.tm_mday,local.tm_hour,local.tm_min);
		mkdir( dir , 0755 );		
	}*/

	return;
}

void localtime( time_t time, long timezone, struct tm *tm_time )
{
	unsigned int	n32_Pass4year;
	int				n32_hpery;
	
	//计算时差
	time = time + timezone;
	if( time < 0 )
		time = 0;
	
	//取秒时间
    tm_time->tm_sec = (int)( time % 60 );
    time /= 60;
    
	//取分钟时间
    tm_time->tm_min = (int)( time % 60 );
    time /= 60;
    
	//取过去多少个四年,每四年有 1461 * 24 小时
    n32_Pass4year = ( (unsigned int)time / (1461L * 24L) );
    
	//计算年份
    tm_time->tm_year = ( n32_Pass4year << 2 );// + 70;
    
	//四年中剩下的小时数
    time %= 1461L * 24L;
    
	//校正闰年影响的年份,计算一年中剩下的小时数
	for( ; ; )
	{
        //一年的小时数
        n32_hpery = 365 * 24;
        
		//判断闰年
        if( ( tm_time->tm_year & 3 ) == 0 )
		{
            //是闰年,一年则多24小时,即一天
            n32_hpery += 24;
		}
        
		if( time < n32_hpery )
		{
			break;
		}
        
		tm_time->tm_year++;
        time -= n32_hpery;
    }
    
	//小时数
    tm_time->tm_hour = (int)( time % 24 );
    
	//一年中剩下的天数
    time /= 24;
    
	//假定为闰年
    time++;
    
	//校正润年的误差,计算月份,日期
    if( ( tm_time->tm_year & 3 ) == 0 )
    {
		if( time > 60 )
		{
			time--;
		}
		else
		{
			if( time == 60 )
			{
				tm_time->tm_mon = 1;
				tm_time->tm_mday = 29;
				return ;
			}
		}
    }
    
	//计算月日
    for( tm_time->tm_mon = 1; Days[ tm_time->tm_mon ] < time; tm_time->tm_mon ++ )
    {
		time -= Days[ tm_time->tm_mon - 1 ];
    }
	
	//习惯问题,其实未满24小时,但是习惯上多加一天
	tm_time->tm_mday = (int)(time) + 1;
	if( tm_time->tm_mday > Days[ tm_time->tm_mon - 1 ] )
	{
		tm_time->tm_mday = 1;
		tm_time->tm_mon ++;
	}
	
	tm_time->tm_year += 1970;
    
	return;
}




⌨️ 快捷键说明

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