-
-
[旧帖] [求助]错误分析,socket 接收邮件 0.00雪花
-
发表于: 2012-9-2 18:16 930
-
;帮忙解释一段代码,socket 接收邮件,谢谢
;编译器RadASM
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include ws2_32.inc
includelib ws2_32.lib
.data?
szBuffer db 256 dup (?)
hSocket dd ?
.const
szPop3 db 'pop.qq.com',0
szRec_Pass db 'pass *********',0dh,0ah,0
szRec_User db 'user ********',0dh,0ah,0
szNoop db 'noop',0dh,0ah,0
.code
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
_ConnectServe proc _lpServe,_dwPort
LOCAL @WsaData:WSADATA
LOCAL @stSin:sockaddr_in
invoke WSAStartup,202h,addr @WsaData ;初始化WSA库
.if eax
jmp _Err
.endif
;创建套接字
invoke socket,AF_INET,SOCK_STREAM,0
.if eax == INVALID_SOCKET
jmp _Err
.endif
mov hSocket,eax
invoke RtlZeroMemory,addr @stSin,sizeof @stSin
invoke gethostbyname,_lpServe ;将主机名转化为IP地址,pop3协议接收邮件,
.if !eax ;smtp协议发送邮件
jmp _Err
.endif
mov eax,[eax + hostent.h_list]
mov eax,[eax]
mov eax,[eax]
mov @stSin.sin_addr,eax
mov @stSin.sin_family,AF_INET
invoke htons,_dwPort ;25号端口发送邮件,110端口接收邮件
mov @stSin.sin_port,ax
;建立连接
invoke connect,hSocket,addr @stSin,sizeof @stSin ;填充sockaddr_in结构后建立连接
.if eax == SOCKET_ERROR
jmp _Err
.endif
invoke RtlZeroMemory,addr szBuffer,sizeof szBuffer
invoke recv,hSocket,addr szBuffer,sizeof szBuffer,0
mov eax,TRUE
ret
_Err:
mov eax,FALSE
ret
_ConnectServe endp
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
start:
invoke _ConnectServe,addr szPop3,110
.if !eax
ret
.endif
;第一次发送 noop指令,正常 ;为什么第二次发送指令出现错误
invoke send,hSocket,addr szNoop,sizeof szNoop,0
invoke RtlZeroMemory,addr szBuffer,sizeof szBuffer
invoke recv,hSocket,addr szBuffer,sizeof szBuffer,0
invoke MessageBox,NULL,addr szBuffer,NULL,MB_OK
;第二次发送 noop指令,错误:-Err unknow command
invoke send,hSocket,addr szNoop,sizeof szNoop,0
invoke RtlZeroMemory,addr szBuffer,sizeof szBuffer
invoke recv,hSocket,addr szBuffer,sizeof szBuffer,0
invoke MessageBox,NULL,addr szBuffer,NULL,MB_OK
ret
end start
;编译器RadASM
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include ws2_32.inc
includelib ws2_32.lib
.data?
szBuffer db 256 dup (?)
hSocket dd ?
.const
szPop3 db 'pop.qq.com',0
szRec_Pass db 'pass *********',0dh,0ah,0
szRec_User db 'user ********',0dh,0ah,0
szNoop db 'noop',0dh,0ah,0
.code
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
_ConnectServe proc _lpServe,_dwPort
LOCAL @WsaData:WSADATA
LOCAL @stSin:sockaddr_in
invoke WSAStartup,202h,addr @WsaData ;初始化WSA库
.if eax
jmp _Err
.endif
;创建套接字
invoke socket,AF_INET,SOCK_STREAM,0
.if eax == INVALID_SOCKET
jmp _Err
.endif
mov hSocket,eax
invoke RtlZeroMemory,addr @stSin,sizeof @stSin
invoke gethostbyname,_lpServe ;将主机名转化为IP地址,pop3协议接收邮件,
.if !eax ;smtp协议发送邮件
jmp _Err
.endif
mov eax,[eax + hostent.h_list]
mov eax,[eax]
mov eax,[eax]
mov @stSin.sin_addr,eax
mov @stSin.sin_family,AF_INET
invoke htons,_dwPort ;25号端口发送邮件,110端口接收邮件
mov @stSin.sin_port,ax
;建立连接
invoke connect,hSocket,addr @stSin,sizeof @stSin ;填充sockaddr_in结构后建立连接
.if eax == SOCKET_ERROR
jmp _Err
.endif
invoke RtlZeroMemory,addr szBuffer,sizeof szBuffer
invoke recv,hSocket,addr szBuffer,sizeof szBuffer,0
mov eax,TRUE
ret
_Err:
mov eax,FALSE
ret
_ConnectServe endp
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
start:
invoke _ConnectServe,addr szPop3,110
.if !eax
ret
.endif
;第一次发送 noop指令,正常 ;为什么第二次发送指令出现错误
invoke send,hSocket,addr szNoop,sizeof szNoop,0
invoke RtlZeroMemory,addr szBuffer,sizeof szBuffer
invoke recv,hSocket,addr szBuffer,sizeof szBuffer,0
invoke MessageBox,NULL,addr szBuffer,NULL,MB_OK
;第二次发送 noop指令,错误:-Err unknow command
invoke send,hSocket,addr szNoop,sizeof szNoop,0
invoke RtlZeroMemory,addr szBuffer,sizeof szBuffer
invoke recv,hSocket,addr szBuffer,sizeof szBuffer,0
invoke MessageBox,NULL,addr szBuffer,NULL,MB_OK
ret
end start
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
看原图
赞赏
雪币:
留言: