📄 419.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center"> ● UNIX网络编程 (BM: clown) </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="316.htm">上一层</a>][<a href="420.htm">下一篇</a>]
<hr><p align="left"><small>/* Scan Defense Deamon (SDD) */ <br>
#include <stdio.h> <br>
#include <stdlib.h> <br>
#include <unistd.h> <br>
#include <syslog.h> <br>
#include <sys/types.h> <br>
#include <sys/socket.h> <br>
#include <sys/wait.h> <br>
#include <sys/stat.h> <br>
#include <netinet/in.h> <br>
#include <arpa/inet.h> <br>
#include <netdb.h> <br>
#include <netinet/ip.h> <br>
#include <netinet/tcp.h> <br>
#include <time.h> <br>
#include <signal.h> <br>
#include <string.h> <br>
extern int errno; <br>
#define HOW_MANY 20 <br>
#define SCAN 25 <br>
#define NOPORT 80 <br>
#define SEC 1 <br>
#define SERVERPORT 2001 <br>
#ifndef NOFILE <br>
#define NOFILE 1024 <br>
#endif <br>
char *hostlookup(int i) <br>
{ <br>
static char buff[256]; <br>
struct in_addr ia; <br>
struct hostent *he; <br>
ia.s_addr = i; <br>
<br>
if (!(he = gethostbyaddr((char *)&ia, sizeof ia, AF_INET))) <br>
strncpy(buff,inet_ntoa(ia),sizeof buff); <br>
else <br>
strncpy(buff,he->h_name,sizeof buff); <br>
return buff; <br>
} <br>
char *servlookup(unsigned short port) <br>
{ <br>
struct servent *se; <br>
static char buff[256]; <br>
se=getservbyport(port, "tcp"); <br>
if(se == NULL) sprintf(buff, "port %d", ntohs(port)); <br>
else sprintf(buff, "%s", se->s_name); <br>
return buff; <br>
} <br>
struct ippkt{ <br>
struct iphdr ip; <br>
struct tcphdr tcp; <br>
} pkt; <br>
struct host{ <br>
unsigned int from; <br>
time_t t; <br>
time_t start; <br>
unsigned short low_port; <br>
unsigned short hi_port; <br>
int count; <br>
} hosts[HOW_MANY]; <br>
char *badips[HOW_MANY]; <br>
void demonize() <br>
{ <br>
int fd, f; <br>
<br>
<br>
if (getppid() != 1){ <br>
signal(SIGTTOU,SIG_IGN); <br>
signal(SIGTTIN,SIG_IGN); <br>
signal(SIGTSTP,SIG_IGN); <br>
f = fork(); <br>
if (f < 0) <br>
exit(-1); <br>
<br>
if (f > 0) <br>
exit (0); <br>
setpgrp(); <br>
for (fd = 0 ; fd < NOFILE; fd++) close(fd); <br>
chdir("/"); <br>
umask(0); <br>
return; <br>
} <br>
} <br>
void init() <br>
{ <br>
int i,ii; <br>
time_t now; <br>
now = time(NULL); <br>
for (i = 0; i < HOW_MANY; i++) <br>
hosts[i].t = now; <br>
} <br>
start_server() <br>
{ <br>
int server_fd,server_len; <br>
struct sockaddr_in server_addr; <br>
if (server_fd= socket(AF_INET,SOCK_STREAM,0) == -1) exit(-1); <br>
server_addr.sin_family = AF_INET; <br>
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); <br>
server_addr.sin_port = htons(SERVERPORT); <br>
server_len = sizeof(server_addr); <br>
if (bind(server_fd,(struct sockaddr *)&server_addr,server_len) == -1) exit(- <br>
1); <br>
listen(server_fd,3); <br>
return(server_fd); <br>
} <br>
int allocate(int *p, unsigned int addr) <br>
{ <br>
int i, v = 0; <br>
time_t tmp = hosts[0].t; <br>
for(i = 0;i < HOW_MANY;i++){ <br>
if (hosts[i].t <= tmp) { <br>
tmp = hosts[i].t; <br>
v = i; <br>
} <br>
if (hosts[i].from == addr){ <br>
*p = 1; <br>
return i; <br>
} <br>
} <br>
*p = 0; <br>
return v; <br>
} <br>
void creat_data() <br>
{ <br>
int i,empty; <br>
empty = 0; <br>
for (i = 0; i < HOW_MANY; i++){ <br>
if (hosts[i].count <= SCAN ) continue; <br>
<br>
memset(badips,0,HOW_MANY); <br>
strcpy(badips[i],"IP:"); <br>
strcat(badips[i],hostlookup(hosts[i].from)); <br>
empty = 1; <br>
} <br>
if (empty==0) empty = -1; <br>
strcpy(badips[0],"The data link is empty."); <br>
} <br>
int send_data(int sfd) <br>
{ <br>
int client_fd,client_len; <br>
struct sockaddr_in client_addr; <br>
creat_data(); <br>
client_fd = accept(sfd,(struct sockaddr *)&client_addr, &client_len); <br>
write(client_fd,badips[HOW_MANY],sizeof(*badips[HOW_MANY])); <br>
close(client_fd); <br>
exit(0); <br>
} <br>
void no_zombie(int i) <br>
{ <br>
wait(NULL); <br>
} <br>
int main (int argc, char **argv) <br>
{ <br>
int s, index, was,sfd; <br>
time_t now; <br>
printf(" \n\n\n \x1b[31;40;1m ******** ********* * <br>
******** \x1b[0m \n"); <br>
printf(" \x1b[31;40;1m * * * * * <br>
*\x1b[0m \n"); <br>
printf(" \x1b[31;40;1m * * * * * <br>
*\x1b[0m \n"); <br>
printf(" \x1b[31;40;1m * * * * * <br>
* \x1b[0m\n"); <br>
printf(" \x1b[31;40;1m * * * * <br>
* \x1b[0m\n"); <br>
printf(" \x1b[31;40;1m * * * * <br>
* \x1b[0m\n"); <br>
printf(" \x1b[31;40;1m * * * * <br>
* \x1b[0m\n"); <br>
printf("\x1b[31;40;1m * * * * <br>
* \x1b[0m\n"); <br>
printf("\x1b[31;40;1m * * * * * <br>
* \x1b[0m\n"); <br>
printf(" \x1b[31;40;1m * * * * * <br>
*\x1b[0m \n"); <br>
printf(" \x1b[31;40;1m * * * * * <br>
*\x1b[0m \n"); <br>
printf(" \x1b[31;40;1m ******* ********* ******** <br>
** \x1b[0m\n\n"); <br>
/* demonize(); */ <br>
init(); <br>
sfd = start_server(); <br>
s = socket(AF_INET, SOCK_RAW, 6); <br>
signal(SIGCHLD,no_zombie); <br>
while(1){ <br>
read(s, (struct ippkt*) &pkt, sizeof(pkt)); <br>
now = time(NULL); <br>
if ( pkt.tcp.dest == SERVERPORT ) { <br>
send_data(sfd); /* 这里没做任何认证 */ <br>
continue; <br>
} <br>
if (pkt.tcp.syn == 1 && pkt.tcp.ack == 0){ <br>
index = allocate(&was,pkt.ip.saddr); <br>
if (!was ){ <br>
<br>
hosts[index].from = pkt.ip.saddr; <br>
hosts[index].low_port = pkt.tcp.dest; <br>
hosts[index].hi_port = pkt.tcp.dest; <br>
hosts[index].count = 1; <br>
hosts[index].t = now; <br>
hosts[index].start = now; <br>
continue; <br>
} <br>
<br>
else if (now - SEC <= hosts[index].t){ <br>
hosts[index].count++; <br>
hosts[index].hi_port = pkt.tcp.dest; <br>
} <br>
hosts[index].t = now; <br>
} <br>
} <br>
} <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="316.htm">上一层</a>][<a href="420.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -