IsActiveIP PROC IP : DWORD
LOCAL VSocket : DWORD
push ecx
push IPPROTO_TCP
push SOCK_STREAM
push AF_INET
call socket
mov VSocket,eax
push IP
pop TestIP
push sizeof(sockaddr) ; Size of connect strucure=16
call IAI1 ; Connect structure
dw AF_INET ; Family
db 0,80 ; Port number,avoid htons :)
TestIP dd 0 ; in_addr of server
db 8 dup(0) ; Unused
IAI1:
push VSocket
call connect ;ret 0 if sucess
push eax
push VSocket
call closesocket
pop eax
pop ecx
ret 4
IsActiveIP ENDP
SelectTrueIP:
push 64
pop ecx
mov esi , offset TrueIPList
STI1: lodsd
push eax
call IsActiveIP ;ret 0 if sucess
.if eax == 0
sub esi , 4
lodsd
jmp STIExit
.else
loop STI1
.endif
xor eax , eax
STIExit:
ret
UpdateTrueIP PROC TrueIP : DWORD
push 64
pop ecx
mov esi , offset TrueIPList
UT1: lodsd
.if eax == 0
push TrueIP
pop [esi-4]
jmp UTExit
.else
loop UT1
.endif
push 64
pop ecx
mov esi , offset TrueIPList
UT2:
lodsd
push eax
call IsActiveIP ;ret 0 if sucess
.if eax != 0
push TrueIP
pop [esi-4]
jmp UTExit
.else
loop UT1
.endif
UTExit:
mov eax , TrueIP
ret 4
UpdateTrueIP ENDP
TrueIPList db 256 dup (0)
关注此文的读者还看过: