Category : Network Files
Archive   : PKTD11B.ZIP
Filename : PKTWATCH.ASM

 
Output of file : PKTWATCH.ASM contained in archive : PKTD11B.ZIP
version equ 0

;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


  3 Responses to “Category : Network Files
Archive   : PKTD11B.ZIP
Filename : PKTWATCH.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. 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/