Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103121374
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-03-26 19:28:09

随着计算机的普及,企业局域网中的计算机越来越多。许多计算机具备用telnet、rlogin、ftp、rcmd等远程登录方式进入服务器的能力。而在实际工作中各联网计算机之间相互远程登录进行业务处理的情况也是日益频繁,如何对这些登录计算机进行监控呢?

问题的提出

网络监管是各种服务器管理的重中之重。如果有一款简捷实用的Unix网络监控软件,该软件能迅速截获并显示所有远程登录计算机的IP地址、以太网地址、远程登录方式、远程登录的用户身份、远程登录的具体时间以及远程登录的进程号,打入命令后即可全方位监控远程登录计算机的各种关键信息,将会给网管人员的工作带来极大的方便。经过一段时间的试验,我们用Shell语言编制了这款监控和截获远程登录计算机的全方位信息的程序,实践效果较好。运行后,所有远程登录计算机的全部关键信息都一目了然地显示出来。一旦发现有非法远程登录者,只须用kill命令杀掉本程序显示的相应的进程号即可迅速清除该非法远程入侵者。

问题的解决
以下是该程序的具体代码,其中netstat命令用于获取远程登录计算机的IP地址,arp命令用于获取远程登录计算机的以太网地址。
#清空原有临时数据文件
if test -e jlog.* ;then
        rm jlog.*
fi

#检查有无远程登录的计算机
ps -ef|grep rlogind|grep -v grep >jlog.tmp
ps -ef|grep telnetd|grep -v grep>>jlog.tmp
ps -ef|grep ftpd|grep -v grep >>jlog.tmp

if [ -f jlog.tmp ];then
        clear
        echo "\33[02;24H您的电脑已被下列计算机远程登录: "
        echo "\33[04;01HIP地址\33[04;16H以太网地址\33[04;32H登录方式\t登录用户\t进程号\t登录时间"
        sort +4 jlog.tmp >jlog.ps
        rm jlog.tmp
        cat jlog.ps|grep -v ftpd >jlog.pnet
        cat jlog.ps|grep ftpd >jlog.pftp

        #区分远程登录方式
        netstat -n |grep ESTABLISHED>jlog.net

        if [ -f jlog.net ];then
                nsum=`wc jlog.net|awk '{print $1}'`
                i=0
                while [ $i -lt $nsum ];do
                        i=`expr $i + 1`
                        na=`head -$i jlog.net|tail -1`
                        nmode=`echo $na |awk '{print $4}'|cut -f5 -d.`
                        if [ "$nmode" -eq 21 -o "$nmode" -eq 23 -o "$nmode" -eq 513 ];then
                                echo $na >>jlog.tmp
                        fi
                done
        fi
       
        #获取以telnet、rlogin远程登录的计算机的登录关键信息
       
        if [ -f jlog.pnet ];then
                cat jlog.tmp|grep -v ".21 "|awk '{print $5}'|cut -f1,2,3,4 -d. >jlog.nett
                who |sort +4 |grep ttyp|awk '{print $1}'>jlog.who

                #获取远程登录计算机的总数
                tsum=`wc jlog.pnet|awk '{print $1}'`
                i=0
                k=4
                while [ $i -lt  $tsum ];do
                        i=`expr $i + 1`
                        k=`expr $k + 1`
                        ta=`head -$i jlog.pnet|tail -1`
                       
                        #获取远程登录的计算机的用户
                        tuser=`head -$i jlog.who|tail -1`
                        #获取远程登录的计算机的IP地址
                        tip=`tail -$i jlog.nett|head -1`
                        tb=`head -$i jlog.pnet|tail -1|awk '{print $8}'`
                        #获取远程登录的计算机的登录方式
                        if [ "$tb" = "telnetd" ];then
                                tmode="telnet"
                        else
                                tmode="rlogin"
                        fi
                        #获取远程登录的计算机的登录时间
                        tpro=`echo $ta|awk '{print $2}'`
                        #获取远程登录的计算机的进程号
                        ttime=`echo $ta|awk '{print $5}'`
                        #获取远程登录的计算机的以太网地址
                        teth=`arp -a|grep $tip |head -1|awk '{print $4}'`
                        if [ "$teth" = "" ];then
                                teth=" "
                        fi
                        echo "\33[$k;01H$tip\33[$k;16H$teth\33[$k;32H$tmode\t$tuser\tt$tpro\t$ttime"
                done
        fi

        #获取以ftp远程登录的计算机关键信息

        if [ -f jlog.pftp ];then
                cat jlog.tmp|grep ".21" |awk '{print $5}'|cut -f1,2,3,4 -d. >jlog.netf
                #获取以ftp远程登录的计算机的总数
                fsum=`wc jlog.pftp|awk '{print $1}'`
                i=0
                l=$k       
                while [ $i -lt $fsum ];do
                        i=`expr $i + 1`
                        l=`expr $l + 1`
                        fa=`head -$i jlog.pftp|tail -1`
                        #获取以ftp远程登录的计算机的用户
                        fuser=`echo $fa|awk '{print $1}'`
                        #获取以ftp远程登录的计算机的登录时间
                        ftime=`echo $fa|awk '{print $5}'`
                        #获取以ftp远程登录的计算机的IP地址
                        fip=`tail -$i jlog.netf|head -1`
                        #获取以ftp登录的计算机的登录方式
                        fb=`echo $fa|awk '{print $8}'`
                        fmode="ftp"
                        #获取以ftp登录的计算机的进程号
                        fpro=`echo $fa|awk '{print $2}'`
                        #获取以ftp登录的计算机以太网地址
                        feth=`arp -a|grep $fip |head -1|awk '{print $4}'`
                        if [ "$feth" = "" ];then
                                feth=" "
                        fi
                        echo "\33[$l;01H$fip\33[$l;16H$feth\33[$l;32H$fmode\t$fuser\tt$fpro\t$ftime"
                done
        fi
        else
        echo "未发现远程登录的计算机!"
fi
阅读(455) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~