CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

[紧急求助]使用openssl遇到的奇怪问题

楼主snlux(snlux)2006-03-03 23:38:14 在 VC/MFC / 网络编程 提问

WSADATA   wsa;  
  WSAStartup(MAKEWORD(1,   1),   &wsa);  
   
  SSL_library_init();  
  SSL_CTX*   ctx   =   SSL_CTX_new(SSLv23_method());  
  SSL*   ssl   =   SSL_new(ctx);  
   
  SOCKET   s   =   socket(AF_INET,   SOCK_STREAM,   0);  
   
  SOCKADDR_IN   sin;  
  memset(&sin,   0,   sizeof(sin));  
  hostent*   host   =   gethostbyname("localhost");  
  sin.sin_addr.s_addr   =   ((LPIN_ADDR)host->h_addr)->s_addr;  
  sin.sin_family   =   AF_INET;  
  sin.sin_port   =   htons(21);  
   
  u_long   arg   =   1;  
  ioctlsocket(s,   FIONBIO,   &arg);  
   
  int   ret   =   connect(s,   (const   sockaddr*)&sin,   sizeof(sin));  
  if   (ret   !=   0)  
  {  
                  if   (WSAGetLastError()   !=   WSAEWOULDBLOCK)  
  return;  
  }  
   
  SSL_set_fd(ssl,   s);  
  SSL_set_connect_state(ssl);  
   
  ret   =   SSL_connect(ssl);  
  if   (ret   <=   0)  
  return;  
   
  char   buf[1024]   =   {   0   };  
  ret   =   SSL_read(ssl,   buf,   sizeof(buf));  
  printf(buf);  
   
  strcpy(buf,   "USER   anonymous\r\n");  
  SSL_write(ssl,   buf,   strlen(buf));  
   
  memset(buf,   0,   sizeof(buf));  
  SSL_read(ssl,   buf,   sizeof(buf));  
  printf(buf);  
   
  strcpy(buf,   "PASS   anonymous@the.net\r\n");  
  SSL_write(ssl,   buf,   strlen(buf));  
   
  memset(buf,   0,   sizeof(buf));  
  SSL_read(ssl,   buf,   sizeof(buf));  
  printf(buf);  
   
  strcpy(buf,   "PASV\r\n");  
  SSL_write(ssl,   buf,   strlen(buf));  
   
  memset(buf,   0,   sizeof(buf));  
  SSL_read(ssl,   buf,   sizeof(buf));  
  printf(buf);  
   
  SOCKET   sd   =   socket(AF_INET,   SOCK_STREAM,   0);  
   
  arg   =   1;  
  ioctlsocket(sd,   FIONBIO,   &arg);  
   
  char*   f   =   strstr(buf,   "(");  
  int   a1,   a2,   a3,   a4,   p1,   p2;  
  sscanf(f,   "(%u,%u,%u,%u,%u,%u)",   &a1,   &a2,   &a3,   &a4,   &p1,   &p2);  
   
  u_short   port   =   p1   *   256   +   p2;  
  sin.sin_port   =   htons(port);  
   
  ret   =   connect(sd,   (const   sockaddr*)&sin,   sizeof(sin));  
  if   (ret   !=   0)  
  {  
  if   (WSAGetLastError()   !=   WSAEWOULDBLOCK)  
  return;  
  }  
   
  SSL*   sl   =   SSL_new(ctx);  
  SSL_set_fd(sl,   sd);  
  SSL_set_connect_state(sl);  
   
                    ret   =   SSL_connect(sl);   //   <-------------------------   问题  
                    if   (ret   <=   0)  
                                  return;  
   
   
   
  上面是简单的FTP客户端连接过程,   问题是使用PASV模式创建了第二个socket,既数据socket后,socket可以成功连接到服务器的数据端口,但是进行ssl连接的时候总是无法成功,如果使用non-blocking模式,则马上返回.如果使用blocking模式,在等待一阵后也未能成功.请问做何解释?如何解决? 问题点数:200、回复次数:5Top

1 楼snlux(snlux)回复于 2006-03-04 00:45:48 得分 0

顶一顶Top

2 楼zephyr007(道可道)回复于 2006-03-04 09:39:44 得分 0

记得ssl要使用密钥文件,不知你配过没有Top

3 楼yuanbocsut(井冈星火)回复于 2006-03-04 14:04:54 得分 0

学习Top

4 楼snlux(snlux)回复于 2006-03-04 20:08:06 得分 0

使用密钥文件结果相同Top

5 楼zblaoshu1979(周博)回复于 2006-03-05 15:51:53 得分 0

到  
  http://www.infosecurity.org.cn/forum/forum.html  
  去问问webmasterTop

相关问题

  • 遇到奇怪问题
  • 遇到奇怪问题
  • 遇到一奇怪现像
  • 奇怪奇怪真奇怪。怎么我老是遇到奇怪问题?
  • 奇怪的问题,你遇到过吗?
  • 我遇到一个奇怪的问题
  • ***我遇到了最奇怪的事情***
  • 谁遇到这样奇怪的问题?
  • DataGrid分页遇到的奇怪问题
  • 遇到一个奇怪的问题

关键词

  • ssl
  • sin
  • ctx
  • ret
  • addr
  • connect

得分解答快速导航

  • 帖主:snlux

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo