今日得闲,于是将POP3的学习笔记也整理出来!

互联网上的TCP/IP,POP3/SMTP等资料多如牛毛,这里只是自己一点点心得,另外对于各位网络方面的大牛请安静的路过,我可不喜欢在关公面前耍大刀...

(还是那句,我比较喜欢用实践来证明一切,这样才会加深自己的理解!)

 一、准备工作:

1、本机环境:Windows XP SP3、公司ADSL 10M光纤

2、开发工具:WildPackets OmniPeek V5.1.4

Visual C++ 6.0

Outlook Express6.0

FlexEdit V2.3.1871

二、SMTP命令:
1、USER username
2、PASS password
3、STAT 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
4、LIST 返回邮件数量和每个邮件的大小
5、RETR [Msg#] 返回由参数标识的邮件的全部文本
6、DELE [Msg#] 服务器将由参数标识的邮件标记为删除,由quit命令执行
7、RSET 服务器将重置所有标记为删除的邮件,用于撤消DELE命令
8、NOOP 服务器返回一个肯定的响应
9、QUIT 更新

三、分析数据包:

1、打开Outlook Express6.0,选择POP协议,内容如下:

2、开始捕获后点击“接收邮件”,内容如下:

3、前面的数据包信息、以太网信息、IP头、TCP头就不用介绍了吧!

数据包中包含到的命令都打圈标记了,下面是LIST返回的数据包:

4、下面是UIDL返回的数据包,邮件唯一的标示:

5、其他小技巧

<CR> <LF>即对应C/C++中的"/r /n"

四、相关代码:

1、以下代码通过socket与POP3服务器建立连接并读取邮件列表、原文等。

打开Visual C++,新建一个控制台工程、并添加一个CPP文件:

[cpp] view plaincopyprint?
  1. /************************************************************************/
  2. /* main.cpp  POP3协议学习笔记 - 连接POP3、读取邮件列表、读取邮件原文
  3. /* by Koma 2009.9.10 14:10
  4. /* http://blog.csdn.net/wangningyu
  5. /************************************************************************/
  6. #include "stdio.h"
  7. #include "winsock2.h"
  8. #pragma comment(lib,"ws2_32.lib")
  9. int main(int argc, char* argv[])
  10. {
  11. SOCKADDR_IN saServer;
  12. LPHOSTENT   lphostent;
  13. WSADATA     wsadata;
  14. SOCKET      hsocket;
  15. int     nRet;
  16. char*   host_name="pop.tom.com";
  17. char*   req=
  18. // 两行是登录用户与密码(以明文的方式发送)
  19. "USER ningyusky@tom.com/r/n"
  20. "PASS w*****/r/n"
  21. "STAT/r/n"      // 获取信箱状态
  22. "LIST/r/n"      // 获取所以邮件列表信息
  23. "UIDL 1/r/n"    // 获取邮件1的唯一标识符
  24. "RETR 3/r/n"    // 从服务器读取出邮件3原文
  25. "QUIT/r/n";     // 退出连接
  26. // 初始化套接字
  27. if(WSAStartup(MAKEWORD(2,2),&wsadata))
  28. printf("初始化SOCKET出错!");
  29. // SMTP端口默认是110
  30. lphostent=gethostbyname(host_name);
  31. if(lphostent==NULL)
  32. printf("lphostent为空!");
  33. hsocket   =   socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  34. saServer.sin_family = AF_INET;
  35. saServer.sin_port = htons(110);
  36. saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
  37. // 利用SOCKET连接
  38. nRet = connect(hsocket,(LPSOCKADDR)&saServer,sizeof(SOCKADDR_IN));
  39. if(nRet == SOCKET_ERROR)
  40. {
  41. printf("建立连接时出错!/n");
  42. closesocket(hsocket);
  43. return 0;
  44. }
  45. // 利用SOCKET发送
  46. nRet = send(hsocket,req,strlen(req),0);
  47. if(nRet==SOCKET_ERROR)
  48. {
  49. printf("发送数据包时出错!");
  50. closesocket(hsocket);
  51. }
  52. char   Dest[20000];
  53. memset(Dest,0,20000);
  54. nRet=1;
  55. while(nRet>0)
  56. {
  57. // 接收返回数据包
  58. nRet=recv(hsocket,(LPSTR)Dest,sizeof(Dest),0);
  59. if(nRet>0)
  60. Dest[nRet]=0;
  61. else
  62. Dest[0]=0;
  63. // 显示返回数据包的大小、内容
  64. printf("/n返回数据包大小:%d/n",nRet);
  65. printf("返回数据包内容:/n%s",Dest);
  66. }
  67. return 0;
  68. }

2、程序运行效果:

转载于:https://www.cnblogs.com/wangfengju/archive/2013/02/20/6173245.html

POP3协议学习笔记相关推荐

  1. 计算机网络协议学习笔记

    title: "计算机网络协议学习笔记" url: "https://wsk1103.github.io/" tags: 学习笔记 OSI模型 开放式系统互联通 ...

  2. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  3. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  4. CoAP协议学习笔记 1.3 用UDP工具来调试CoAP

    1 前言 CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持. 既然CoAP是基于UDP来组包的,那肯定是可以实现. 所以这篇文章给 ...

  5. 网络协议学习笔记 · 22

    IPv6 · 流媒体 · 即时通讯 · 缓存 · 网络爬虫 VPN 作用 VPN与代理的区别 实现原理(隧道协议) 网络爬虫 简易实例 robots.txt 无线网络 缓存(Cache) 响应头 请求 ...

  6. CoAP协议学习笔记 1.2 一张表了解 CoAP 协议

    1 前言 对于CoAP协议的学习,这份100多页的文档肯定没法背下来.我们只需把协议当作工具书,大体知道主体的内容,在遇到细节问题时再去具体章节找问题. 本篇笔记中先对 CoAP 协议内容做个基础了解 ...

  7. CoAP协议学习笔记 3.1 CoAP协议翻译 加密基础介绍

    CoAP协议学习笔记可点此查看. 1 前言 在之前的学习中,没有过多关注加密.但实际部分厂家的IoT平台(阿里云.OneNET)已经启用了相关安全处理,有必要深入学习下. 在 CoAP 协议 RFC7 ...

  8. BGP协议学习笔记——BGP基础

    BGP协议学习笔记--BGP基础(BGP概念.BGP报文.BGP状态机.BGP关系建立.BGP路由通告) 说明:本文学习笔记整理自网络.华为公开产品文档.华为公开PPT及部分的自我理解 一.BGP简介 ...

  9. 极客HTTP协议学习笔记破冰篇(1-7)

    极客HTTP协议学习笔记破冰篇(1-7) 前言 各篇章笔记链接 一.学习笔记 1.HTTP的前世今生 2.HTTP是什么 3.与HTTP相关的各种概念(上) 4.与HTTP相关的各种概念(下) 5.常 ...

最新文章

  1. 布隆过滤器+布隆过滤器(Bloom Filter)详解
  2. 2021年,深度学习还有哪些未饱和、有潜力且处于上升期的研究方向?
  3. Linux vi/vim使用方法 总结
  4. 感觉灵感被掏空?你需要这 9 篇论文来补一补 | PaperDaily #05
  5. 常用的函数式接口_Supplier接口
  6. Citrix无法访问本地磁盘
  7. 解开拒绝本地登录的“死结”
  8. 16重新安装HA0.63
  9. openmvide使用需要什么插件_在Django中使用Webpack:再也不需要插件了!
  10. android selector 中的选中、点击、获得焦点的区别
  11. 软工实践Alpha冲刺(6/10)
  12. 用tensorflow实现矩阵分解
  13. js链接oracle数据库语法,js连接oracle数据库
  14. 巧用 Cowrie 部署 SSH 蜜罐,让黑客攻击无处遁形!
  15. 怎么不让WORD自动检查语法和拼写错误,福利在这里,不让WORD自动检查语法和拼写错误该如何设置
  16. 《数据结构教程(李春葆主编 第五版)》第一章源代码 + 《数据结构》上机实验(第九章) —查找
  17. matlab仿真add,simulink中add和sum
  18. python对excel增删改查_利用python模拟sql语句对员工表格进行增删改查
  19. 加密币Terra创始人权道亨已从新加坡飞往杜拜转往第三国
  20. C# 微信证书签名,WECHATPAY2-SHA256-RSA2048 签名方式

热门文章

  1. 一秒钟世界上会发生多少事_一秒之中会发生什么
  2. python获取月份 pos_python – 如何从POS标记单词列表中提取模式? NLTK
  3. 系统学习机器学习之弱监督学习(三)--Adversarial Autoencoders
  4. 前景检测算法(九)--PBAS算法
  5. js调用java_Js调用Java方法并互相传参的简单实例
  6. mui index.html标题栏,HBuilder MUI 顶部标题栏一直显示首页的问题
  7. Broker 的 Heap Size 如何设置?
  8. Hive排名函数入门
  9. Windows核心编程_锁屏
  10. SharePoint Framework 基于团队的开发(一)