分享一段进行时间控制的C程序
单位用coyote做路由上网,可是在上班时间老是有很多人疯狂地用bt、迅雷、emule下载,严重影响了正常的工作。本来有iptables的time模块的,可是我试了下,time模块居然不支持在POSTROUTING链中作限制。所以花了点儿时间,写了段c程序,用以控制使用p2p的时间。这段程序的作用就是设置早7点至晚23点禁止p2p下载,其余时间则则允许。本程序只能精确到小时,期待有人改进下,可以精确到分钟。这段程序可以在任何linux机器上编译通过,编译命令为:gcc time.c -o timeset
time.c的源码如下:
#include ;
#include ;
void start_bt(int ii)
{
if (ii == 1)
{
system("/etc/start.sh");
}
else
;
}
void stop_bt(int ii)
{
if (ii == 0)
{
system("/etc/stop.sh");
}
else
;
}
main()
{
time_t timep;
struct tm *p;
time(&timep);
int start,stop,i;
start = 23;
stop= 7;
p=localtime(&timep);
if (p->tm_hour tm_hour >= start)
i = 1;
else
i = 0;
while(1)
{
time(&timep);
p=localtime(&timep); /*取得当地时间*/
if (p->tm_hour tm_hour >= start)
{
start_bt(i);
i=0;
}
else
{
stop_bt(i);
i=1;
}
sleep(60);
}
}
原理:在给定的时间范围内调用shell脚本,两个脚本在/etc目录中,内容如下
stop.sh
#!/bin/sh
iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j DROP
iptables -t mangle -A POSTROUTING -m layer7 --l7proto xunlei -j DROP
iptables -t mangle -A POSTROUTING -m layer7 --l7proto edonkey -j DROP
iptables -t mangle -A POSTROUTING -m layer7 --l7proto bitcomet -j DROP
start.sh
#!/bin/sh
iptables -t mangle -D POSTROUTING -m layer7 --l7proto bittorrent -j DROP
iptables -t mangle -D POSTROUTING -m layer7 --l7proto xunlei -j DROP
iptables -t mangle -D POSTROUTING -m layer7 --l7proto edonkey -j DROP
iptables -t mangle -D POSTROUTING -m layer7 --l7proto bitcomet -j DROP
使用方法:
直接运行编译出来的timeset程序,命令行:
timeset &
本来应当它把做成守护进程运行的,但因初学C,有很多不明白,请大家莫笑。 怎么不用cron做?那要简单得多了。
是不是太美在练习C编程? SYSTEMTIME sys;
GetLocalTime(&sys);
以下是SYSTEMTIME的结构
typedef struct_SYSTEMTIME
{
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
}SYSTEMTIME;
这个是Win32下的,不知道Linux下是否也一样 做笔记中。。。。
页:
[1]