如何全屏监视网络教室登录账号与机位分布

──网络教室管理经验之一

(黄齐坚版权所有,未经许可不得转载)

  如果你是学校计算机网络机房的管理员或教师,你一定希望自己的学生上机时循规蹈矩,按学号在指定的工作站上机操作,而不是随心所欲到处乱跑。要做到这一点,首先,你必须把教室内工作站按地理位置顺序编号;其次,要给每个学生分配一个用户账号,(如文秘三班的六十位学生可设为W301、W302......W360),并对学生提出纪律要求;第三,你得有一个网络监视程序,能直观明暸地全屏监视每个学生账号在教室内的分布情况,以便于控制教学过程和纪律。对于前两个条件,应该说没有哪个学校的网络机房是不具备的。但第三个条件却不尽然。

  本文介绍在Novell 3.1x上,实现网络教室全屏监视功能程序的设计思路,并提供完整的源程序。

 

可用资源

  我们知道,每块网卡都有唯一的序列号(ID)。利用这个ID,就可以标记每台工作站的地理位置。例如01号工作站的网卡ID为D3369FA21G、02号工作站的网卡ID为D3369FA336......。另外,Novell 3.1x为我们提供了一个USERLIST命令,执行USERLIST /A,可将当前登录的用户账号与网卡ID一一对应列表。综合使用这两项资源,我们就可以将当前登录的用户账号与工作站的地理位置对应起来,满足上述机位管理的第三个条件。

 

前期准备:建立网卡ID与工作站序列号的联系

  为了在监视过程中将用户账号联系到工作站序号中,首先必须建立一个ID匹配文件,把每台工作站的序列号与网卡ID一一对应起来。工作站的序列号是人为编排的,一般按机器的地理位置顺序编排。网卡ID可在每台工作站上运行USERLIST /A后抄下来,但要抄遍整个机房也太累人了。我的做法是:

  1、启动服务器,禁止无关的用户上网

  2、从01号工作站开始,按顺序用学生账号登录上网(例如W1301登录01号机、W1302登录02号机、W1360登录60号机)

  3、在教师机上登录,运行以下Turbo BASIC程序段,获得ID匹配文件(NCODE.ADD),从而实现将网卡ID与工作站序列号一一对应的目的。

 

DIM A$(250)

SHELL "USERLIST /A >USER$$$.%%%" '生成当前上网的用户列表临时文件

OPEN "USER$$$.%%%" FOR INPUT AS#1 '打开临时文件

INPUT#1, F$,F$,F$,F$ '跳过临时文件表头

OPEN "NCODE.ADD" FOR OUTPUT AS#2 '建立ID匹配文件

J=0

FOR I=1 TO 999

INPUT#1, F$

IF F$<>"" THEN

J=J+1

UN$=MID$(F$,L-28,10) '读用户账号

A$="0"+RIGHT$(UN$,2) '提取用户账号的最后两位数码(作为工作站顺序号)

U$=MID$(F$,L,12) '提取网卡ID

A$(J)=A$+" "+U$+" "+UN$ '合成ID匹配文件的一个记录行

END IF

IF EOF(1) THEN EXIT FOR

NEXT

CLOSE#1 '关闭临时文件

T=J

'对标准文件的记录按工作站顺序号排序

FOR I=1 TO T-1

FOR J=I+1 TO T

IF A$(I)>A$(J) THEN

A$=A$(I): A$(I)=A$(J): A$(J)=A$

END IF

NEXT

PRINT#2, A$(I)

NEXT

PRINT#2, A$(I)

CLOSE#2 '关闭并保存ID匹配文件

END

  这样得到的NCODE.ADD是一个顺序数据文件,其结构如下:

001 CDF91F4A W301

002 CDF92089 W302

003 80AD0FD933 W303

:

  每行的前三个字符是工作站序列号,第5到16字符为该工作站网卡的ID,第23字符以后为建立NCODE.ADD时登录该工作站的用户账号(仅供参考用)。

 

动态监视过程的实现

  为了实施动态监视,可在每个等距时间段(例如120秒)执行一个处理循环,刷新一次监视结果。每个处理循环的具体过程是:

  1、调用USERLIST /A命令,生成一个用户列表临时文本文件;

  2、从这个文件的每一行提取网卡ID,进行工作站序列号的定位;

  3、从同一行提取用户账号及登录时间,并显示在所用工作站序列号旁;

  4、判断用户账号是否与工作站序列号对应,把“跳槽”学生的账号以另类背景色标记出来,将不同班级学生的账号用另类前景色标记出来。

  实现监视过程的Turbo BASIC源程序如下:

 

DIM P$(250),DIM DYNAMIC U3$(200),U4$(200)

OPEN "NCODE.ADD" FOR INPUT AS#1 '打开ID匹配文件

FOR I=1 TO 250

INPUT#1, F$

U3$(I)=MID$(F$,5,12) '读标准文件中的网卡ID

U4$(I)=MID$(F$,1,3) '读工作站号

IF EOF(1) THEN EXIT FOR

NEXT

CLOSE#1

USERS=I 'USERS-- 工作站总数

DIM DYNAMIC U2$(USERS)

DO

FOR I=1 TO USERS: P$(I)="": U2$(I)="": NEXT

SHELL "USERLIST /A >USER$$$.%%%" '生成当前上网的用户列表临时文件

OPEN "USER$$$.%%%" FOR INPUT AS#1

INPUT#1, F$,F$,F$,F$ '跳过临时文件表头

Y=0

FOR I=1 TO 999

INPUT#1, F$

IF F$<>"" THEN

L=36

X=VAL(MID$(F$,1,3)) '取登录顺序号X

IF X>9 THEN L=L+1: IF X>99 THEN L=L+1 '取顺序号数字长度L

U1$=MID$(F$,L,12) '读网卡ID

FOR J=1 TO USERS

IF U1$=U3$(J) THEN '逐一与标准文件中的ID比较, 相同则

Y=Y+1

P$(J)=MID$(F$,L-28,10) '读用户名

U2$(J)=MID$(F$,L+26,8) '读登录时间

EXIT FOR

END IF

NEXT

END IF

IF EOF(1) THEN EXIT FOR

NEXT

CLOSE#1

KILL "USER$$$.%%%" '删临时文件

COLOR 15,1

CLS

COLOR 4,7

PRINT "《教学网络监视器》v1.5(单教室版) 高州农校 HQJ(99.9) ";Y;" ";

LOCATE 1,60: COLOR 0,7:PRINT "击任意键刷新, ECS退出"

LOCATE 2,1: COLOR 14,12: PRINT "│机号 用户 入网时间 │机号 用户 入网时间 │机号 用户 入网时间 "

COLOR 14,1

FOR J=1 TO USERS

IF J=70 THEN I$=INPUT$(1): CLS

IF J>69 THEN

JJ=J-69

ELSE

JJ=J

END IF

ST$=U4$(J)

H=((JJ-1) MOD 23)+3: L=INT((JJ-1)/23)*26

LOCATE H,L+1: PRINT "│";ST$;" "; '显示工作站号

IF LEN(P$(J))>0 THEN '计算用户名前景色值

CO=ASC(MID$(P$(J),1,1))*10+ASC(MID$(P$(J),2,1))

CO=(CO MOD 15)+1

IF CO=1 THEN CO=0

END IF

'如果学号与工作站号不对应,则用户名背景色为橙色,否则蓝色

IF ST$<>MID$(P$(J),3,2) THEN

COLOR CO,6

ELSE

COLOR CO,1

END IF

PRINT P$(J);" ";U2$(J);

COLOR 14,1

NEXT

LOCATE 2,1

FOR S1=1 TO 120 '每120秒刷新一次

DELAY 1

I$=INKEY$

IF I$<>"" THEN S1=120 '或击任意键刷新

NEXT

LOOP UNTIL I$=CHR$(27) '击ESC键退出

SHELL "PURGE USER$$$.%%% >NUL" '清理临时文件

END