📄 298.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="289.htm">上一层</a>][<a href="299.htm">下一篇</a>]
<hr><p align="left"><small>发信人: lisuke (smart), 信区: Security <br>
标 题: 一个简单的telnetd防护程序(1) <br>
发信站: BBS 水木清华站 (Wed Oct 25 00:26:16 2000) <br>
<br>
本文和一下是转载一个在solaris下实现一个小的telnetd防火墙类防护程序。 <br>
程序内容本身很简单,只供入门者阅读。 <br>
需求: <br>
1.加入文件/etc/telnet.allow,里面包含允许telnet的IP地址 <br>
和网段(为简单起见,网段格式只支持XXX.XXX.XXX.0) <br>
telnet.allow格式如下: <br>
172.18.85.0 (网段) <br>
172.18.89.22 <br>
... <br>
2.加入文件/etc/telnet.log,记录位授权IP失败的telnet记录, <br>
包括时间和IP。 <br>
首先改inetd.conf,用自己的程序接管in.telnetd,该程序定名为 <br>
in.telnetd.firewall,比较长呵呵。 <br>
相应inetd.conf中telnet那一行变为: <br>
telnet stream tcp nowait root /usr/sbin/in.telnetd.firewall <br>
in.telnetd.firewall <br>
然后写in.telnetd.firewall.c,原理:先初始化授权地址表(函数InitAuthIP), <br>
然后检查对方地址(函数getpeername)是否与表中地址匹配(函数IPIsAuthed), <br>
若不匹配记下时间和对方地址并警告对方,否则将处理移交(系统调用execl)给 <br>
真实服务进程,即/usr/bin/in.telnetd。 <br>
# include <stdio.h> <br>
# include <sys/types.h> <br>
# include <sys/socket.h> <br>
# include <netinet/in.h> <br>
# include <netdb.h> <br>
# include <unistd.h> <br>
# include <unistd.h> <br>
# include <errno.h> <br>
# define TRUE 0 <br>
# define FALSE -1 <br>
main( ) <br>
{ <br>
struct sockaddr_in it; <br>
int itlen; <br>
itlen = sizeof(struct sockaddr_in); <br>
InitAuthIP("/etc/telnet.allow"); /* read authorized IPs */ <br>
/* check the source ip */ <br>
if (getpeername(0, (struct sockaddr *)&it, &itlen) < 0) { <br>
perror("getpeername"); <br>
exit(-1); <br>
} <br>
} <br>
if (IPIsAuthed(it.sin_addr.s_addr) == FALSE) { <br>
InitLog("/etc/telnet.log"); <br>
PrLog("%s", inet_ntoa(it.sin_addr)); <br>
EndLog( ); <br>
if (getpeername(0, (struct sockaddr *)&it, &itlen) < 0) { <br>
perror("getpeername"); <br>
exit(-1); <br>
} <br>
if (IPIsAuthed(it.sin_addr.s_addr) == FALSE) { <br>
InitLog("/etc/telnet.log"); <br>
PrLog("%s", inet_ntoa(it.sin_addr)); <br>
} EndLog( ); <br>
if (IPIsAuthed(it.sin_addr.s_addr) == FALSE) { <br>
InitLog("/etc/telnet.log"); <br>
PrLog("%s", inet_ntoa(it.sin_addr)); <br>
printf("Not on console, u have been loged, xixi...;)\n"); <br>
close(0); <br>
exit(0); <br>
} <br>
execl("/usr/sbin/in.telnetd", "in.telnetd", (char *)0); <br>
} <br>
-- <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="289.htm">上一层</a>][<a href="299.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 + -