2012年7月5日星期四

scan_ip.asm


;利用UDP的sengdto函数发送是否成功来实现本功能,不知实现方法正确不?但编程方法自认为值得保存参考。
;不足之处敬请指导。
;在输入端口时没有进行输入限制,并转化为数字。
;在不联网的计算机上能显示d类的ip地址与以127开头的环回ip地址。
.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
sz127 db "127",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,\
          "注意输入端口号时按住alt同时按数字键",0ah,0dh,\
          "输入完毕(无论显示如何)按回车键确认,直接按回车键也可以",0dh,0ah,\
          "请输入端口号(0-65536):",0ah,0dh,\
          0
sended db "计算机的此端口已经开放。",0dh,0ah,0
over db "按回车键结束!",0
.data?
ipwsadata WSADATA <>
ipsockaddr sockaddr_in <> ; db 16 dup (?)
buffer db 6 DUP (?)
s dd ?
hstdin dd ?
hstdout dd ?
x dd ?
ipaddr dd ?
.code
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
mov bx,word ptr buffer
MOV ipsockaddr.sin_port,bx
mov ipsockaddr.sin_family,AF_INET
mov esi,0
again:
mov ipsockaddr.sin_addr,esi
invoke sendto,s,addr correy,sizeof correy,0,addr ipsockaddr,sizeof ipsockaddr
cmp eax,-1
je wrong
invoke inet_ntoa,esi
mov dword ptr ipaddr,eax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;在没有联网时,此部分内容可以去掉,以显示跟多的内容,以增加运行的信心。
;去掉任何一个je行,就能显示更多的几行内容。
mov eax,[eax];过滤127.的环回ip地址。
cmp eax,".721";127.
;je wrong
cmp eax,".422";224.过滤d类的ip地址,此方法有点笨,没有比较,但也能实现。
je wrong
cmp eax,".522";屏蔽所有的225.X.X.X地址。
je wrong
cmp eax,".622";226.
je wrong
cmp eax,".722";227.
je wrong
cmp eax,".822";228.
je wrong
cmp eax,".922";229.
je wrong
cmp eax,".032";230.
je wrong
cmp eax,".132";231.
je wrong
cmp eax,".232";232.
je wrong
cmp eax,".332";233.
je wrong
cmp eax,".432";234.
je wrong
cmp eax,".532";235.
je wrong
cmp eax,".632";236.
je wrong
cmp eax,".732";237.
je wrong
cmp eax,".832";238.
je wrong
cmp eax,".932";239.
je wrong
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
invoke lstrlen,ipaddr
invoke WriteFile,hstdout,ipaddr,eax,0,0
invoke WriteFile,hstdout,addr sended,sizeof sended-1,0,0
wrong:;没有成功的不显示。
inc esi
cmp esi,0ffffffffh
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.06

没有评论:

发表评论