Category : Network Files
Archive   : PKTD11B.ZIP
Filename : PKTWATCH.ASM
;History:335,1
; Copyright 1990-1992, Russell Nelson, Crynwr Software
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, version 1.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
include defs.asm
code segment word public
assume cs:code, ds:code
org 80h
phd_dioa label byte
org 100h
start:
jmp start_1
copyleft_msg label byte
db "Packet watcher version ",'0'+(majver / 10),'0'+(majver mod 10),".",'0'+version," copyright 1990-92, Russell Nelson.",CR,LF
db "This program is free software; see the file COPYING for details.",CR,LF
db "NO WARRANTY; see the file COPYING for details.",CR,LF
crlf_msg db CR,LF,'$'
their_isr dd ?
entry_point db ?,?,?,?
handle dw ?
int_pkt:
push ds
push es
pushf
cli
call their_isr
pop es
pop ds
ret
no_sig_msg db "No packet driver at that address",'$'
usage_msg db "usage: pktwatch
cursor_size dw ? ;save the cursor size here.
cursor_locn dw ? ;save the cursor location here.
address_switch db 0
ether_addr db EADDR_LEN dup(-1)
usage_error:
mov dx,offset usage_msg
error:
mov ah,9
int 21h
int 20h
start_1:
mov si,offset phd_dioa+1
cmp byte ptr [si],CR ;end of line?
je usage_error
mov di,offset entry_point
call get_number
another_switch:
call skip_blanks
cmp al,'-' ;did they specify a switch?
je have_switch
jmp not_switch
have_switch:
cmp byte ptr [si+1],'a' ;did they specify '-a'?
je got_addr_switch
jmp usage_error ;no, must be an error.
got_addr_switch:
add si,2
mov di,offset ether_addr
movseg es,ds
call get_eaddr
mov address_switch,1
jmp another_switch
not_switch:
call skip_blanks
cmp al,CR
jne usage_error
call verify_packet_int
jc error
mov dx,offset no_sig_msg
jne error
mov their_isr.offs,bx
mov their_isr.segm,es
;save the current screen.
push ds
mov ax,0b800h
mov ds,ax
xor si,si
movseg es,cs
mov di,offset screen_buffer
mov cx,25*80
rep movsw
pop ds
mov ah,3 ;get the current cursor position.
mov bh,0
int 10h
mov cursor_size,cx
mov cursor_locn,dx
mov ah,1 ;disable the hardware cursor.
mov cx,2000h
int 10h
mov ax,1ffh ;driver_info
call int_pkt
call fatal_error
mov ah,2 ;access all packets.
mov al,ch ;their class from driver_info().
mov bx,dx ;their type from driver_info().
mov dl,cl ;their number from driver_info().
mov cx,0 ;type length of zero.
movseg es,cs
mov di,offset our_recv
call int_pkt
call fatal_error
mov handle,ax
mov ah,20 ;set receive mode.
mov bx,handle
mov cx,6 ;receive all packets.
call int_pkt
call fatal_error
mov ah,0fh ;get the video mode.
int 10h
mov ah,0 ;set the video mode (clear the screen).
int 10h
wait_for_key:
mov ah,1 ;check for any key.
int 16h
je wait_for_key ;no key -- keep waiting.
mov ah,0 ;fetch the key.
int 16h
all_done:
mov ah,20 ;set receive mode.
mov bx,handle
mov cx,3 ;receive ours + broadcasts.
call int_pkt
call fatal_error
mov ah,3
mov bx,handle
call int_pkt
call fatal_error
mov ax,0b800h
mov es,ax
xor di,di
mov si,offset screen_buffer
mov cx,25*80
rep movsw
mov ah,1
mov cx,cursor_size
int 10h
mov ah,2
mov bh,0
mov dx,cursor_locn
int 10h
mov dx,offset copyleft_msg
mov ah,9
int 21h
int 20h
our_recv:
or ax,ax ;first or second call?
jne our_recv_1 ;second -- bump the packet flag.
movseg es,cs
mov di,offset our_buffer
retf
our_recv_1:
push ax
push bx
push cx
push dx
push si
push di
push bp
push ds
push es
cld
mov ax,cs
mov ds,ax
mov es,ax
cmp address_switch,0 ;are we looking for an address?
je our_recv_save ;no.
cmp word ptr [si][0],-1 ;always receive broadcasts.
jne our_recv_2
cmp word ptr [si][2],-1
jne our_recv_2
cmp word ptr [si][4],-1
je our_recv_save
our_recv_2:
mov di,offset ether_addr ;is the destination our address?
mov cx,EADDR_LEN/2
repe cmpsw
je our_recv_save ;yes, display it.
add si,cx ;move to source address.
mov di,offset ether_addr ;is the source our address?
mov cx,EADDR_LEN/2
rep cmpsw
jne our_recv_exit ;no, skip it.
our_recv_save:
call receive
our_recv_exit:
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
retf
receive_ptr dw 0
receive:
mov si,offset our_buffer ;get the "to" address.
mov ax,0b800h
mov es,ax
mov di,receive_ptr
mov bx,[si][EADDR_LEN][EADDR_LEN]
xchg bh,bl
mov ah,20h ;IP
cmp bx,800h
je receive_2
mov ah,30h ;ARP
cmp bx,806h
je receive_2
mov ah,40h ;Novell
cmp bx,8137h
je receive_2
mov ah,50h ;all IEEE 802.3
cmp bx,1500
jbe receive_2
mov ah,70h
receive_2:
lodsb
mov bl,al
shr al,1
shr al,1
shr al,1
shr al,1
and al,0fh
add al,90h ;binary digit to ascii hex digit.
daa
adc al,40h
daa
stosw
mov al,bl
and al,0fh
add al,90h ;binary digit to ascii hex digit.
daa
adc al,40h
daa
stosw
cmp si,offset our_buffer+40 ;can only dump first 40 bytes.
loopne receive_2
add receive_ptr,2*80
cmp receive_ptr,25*2*80
jb receive_1
mov receive_ptr,0
receive_1:
mov di,receive_ptr
mov cx,80
mov ax,0
rep stosw
ret
include pkterr.asm
include getnum.asm
include getdig.asm
include skipblk.asm
include chrout.asm
include verifypi.asm
include getea.asm
align 4
our_buffer label byte
screen_buffer equ our_buffer + GIANT + 2
code ends
end start
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/