如何全屏监视网络教室登录账号与机位分布
──网络教室管理经验之一
(黄齐坚版权所有,未经许可不得转载)
如果你是学校计算机网络机房的管理员或教师,你一定希望自己的学生上机时循规蹈矩,按学号在指定的工作站上机操作,而不是随心所欲到处乱跑。要做到这一点,首先,你必须把教室内工作站按地理位置顺序编号;其次,要给每个学生分配一个用户账号,(如文秘三班的六十位学生可设为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 |