2012年7月5日星期四

scan_port.asm


;扫描一台计算机上开放的端口。
;本程序运行时有问题:扫描到9f端口端口时会自动结束。
;利用UDP的sengdto函数发送是否成功来判断端口是否开放,不知方法正确不?
;不足之处敬请指导。
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include ws2_32.inc
includelib kernel32.lib
includelib WS2_32.lib
.data
correy db "made by correy.",0
ip db "127.0.0.1",0
notice db "本功能扫描一台计算机上开放的端口。",0ah,0dh,\
          "made by correy",0ah,0dh,\
          "QQ:112426112",0ah,0dh,\
          "Email:leguanyuan@126.com",0ah,0dh,\
          "Homepage:http://correy.webs.com",0ah,0dh,\
          "请输入正确的ip地址,按回车键确认",0ah,0dh,0
sended db "端口已经开放。",0dh,0ah,0
uns db "端口没有开放。",0dh,0ah,0
over db "按回车键结束!",0
.data?
ipwsadata WSADATA <>
ipsockaddr sockaddr_in <> ; db 16 dup (?)
buffer db 256 DUP (?)
bufferl db 8 dup (?)
s dd ?
hstdin dd ?
hstdout dd ?
x dd ?
.code
showeax proc
;local bufferl[8]:byte
;local correy[15]:byte
mov ecx,8
xor esi,esi
againp:
dec ecx
rol eax,4
push eax
and eax,0Fh
cmp eax,9
jg big
add eax,30h         
mov [bufferl+esi],al
pop eax
inc esi
cmp ecx,0
jne againp
je showp
big:
add eax,37h         
mov [bufferl+esi],al
pop eax
inc esi
cmp ecx,0
jne again
showp:;invoke MessageBox,NULL,addr buffer,0,0
ret
showeax endp
start:
invoke GetStdHandle,-10
mov hstdin,eax
invoke GetStdHandle,-11
mov hstdout,eax
invoke WSAStartup,2,addr ipwsadata
invoke socket,AF_INET,SOCK_DGRAM,0
mov s,eax
invoke WriteFile,hstdout,addr notice,sizeof notice-1,0,0
invoke ReadFile,hstdin,addr buffer,sizeof buffer,addr x,0
;invoke WriteFile,hstdout,addr buffer,sizeof buffer,0,0
invoke inet_addr,addr buffer
mov ipsockaddr.sin_addr,eax
mov ipsockaddr.sin_family,AF_INET
mov bx,0
again:
MOV ipsockaddr.sin_port,bx
invoke sendto,s,addr correy,sizeof correy,0,addr ipsockaddr,sizeof ipsockaddr
cmp eax,-1
je wrong
movzx ebx,bx
mov eax,ebx
call showeax
invoke WriteFile,hstdout,addr bufferl,sizeof bufferl,0,0
invoke WriteFile,hstdout,addr sended,sizeof sended-1,0,0
inc bx
cmp bx,65535
je exit
jmp again
wrong:
movzx ebx,bx
mov eax,ebx
call showeax
invoke WriteFile,hstdout,addr bufferl,sizeof bufferl,0,0
invoke WriteFile,hstdout,addr uns,sizeof uns-1,0,0
inc bx
cmp bx,65535
je exit
jmp again
exit:
invoke WriteFile,hstdout,addr over,sizeof over,0,0
invoke ReadFile,hstdin,addr buffer,sizeof buffer,addr x,0
invoke closesocket,s
invoke WSACleanup
invoke ExitProcess,0
end start
;made at 2010.07.05

没有评论:

发表评论