数据帧:帧头+IP数据包+帧尾 (帧头包括源和目标主机MAC地址及类型,帧尾是校验字)
IP数据包:IP头部+TCP数据信息(IP头包括源和目标主机IP地址、类型、生存期等)
TCP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校验字等)
以下协议均是 在 wireshark 下抓包获取的,每个协议区分于其他协议的都有一个特征位,或者标示符,只需要找到相应就ok!,关于各协议的具体流程你可以参考RFC。
1、DNS ----域名解析服务器
DNS 默认端口 53;
基于UDP,我们可以看到,dns分请求和响应,请求的标示位|0100| 而响应的response 为|8180|。然后我们可以根据这些东西在编写程序的时候获取这些包。
2、HTTP 协议
HTTP协议是一种请求/响应型的协议,HTTP通信通常发生在TCP/IP连接上。默认端口是TCP 80;
HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIs,这种无效长度的URL可能会在客户端以基于 GET方式的请求时产生。如果服务器不能处理太长的URI的时候,服务器应该返回414状态码(此状态码代表Request-URI太长)。
方法Method可选值:
Method = "OPTIONS"
| "GET"
| "HEAD"
| "POST"
| "PUT"
| "DELETE"
| "TRACE"
| "CONNECT"
| extension-method
extension-method = token
1.2 URL定义
Request-URI = "*" | absoluteURI | abs_path | authority
图2是16进制表示的。可以看到htp数据部分,首先是GET,我们可以通过这个表示去区别协议包、、。。。。
至于URL 表示不太理解rfc中所说的,我的做法是Host后面的内容+GET 后面的内容、
3、netbios 协议
NETBIOS名字用来在网络上鉴别一台计算机。
137端口:netbios 的名称 UDP
138端口: netbios数据报 UDP
139端口: netbios会话 TCP
这边讨论的是网上邻居《可以抓到NBSS包即:netbios session》 端口139
让我们假设一个这样的环境:一个客户端希望访问一台服务器上的特定资源。
1 - 开始于客户端向服务器请求一个NETBIOS会话。客户端发送它的已编码的NETBIOS名字到SMB 服务器(它们在139端口监听连接请求)。服务器接收到NETBIOS名字后回复一个NETBIOS会话数据报给 有效的会话连接。客户端在建立了连接之后才能进入访问。
一个软件接口和命名系统。每台主机都有一个长度为15个字符的NETBIOS名字,且第十六个字符用来标志主机的类型(域名服务器,工作站……)。
第十六个字符的选择:
0x00 基础电脑,工作站。0x20 资源共享服务器。
2、关于netbios 的名字
编码一个NETBIOS名字非常的简单。例如我的计算机的NETBIOS名字是“BILL”,它是一个工作站,所以它的第十六个字符为“0x00”。
首先,如果一个NETBIOS名字比15字节短,就会在右边补填上空格。
“BILL “
十六进制为: 0x42 0x49 0x4c 0x4c 0x20 0x20 ......0x00
每个字节都分裂为4位一组:
0x4 0x2 0x4 0x9 0x4 0xc 0x4 0xc 0x2 0x0 .......
而且每个4位都要添加ASCII码‘A’的值(0x41)。
0x4 + 0x41 = 0x45 -> ASCII value = E0x2 + 0x41 = 0x43 -> ASCII value = C……
最后NETBIOS名字被编码为32字节长。
代码:
static uint8_t* OperatorUserParse(uint8_t* user)
{
char tmp[32]={'\0'};
int i=0,j=0,num1=0,num2=0;
memset(tmp,0,sizeof(tmp));
int len =strlen(user);
for(j;j<len;j=j+2)
{
num1 = user[j]-'A';
num2 = user[j+1]-'A';
tmp[i++]=num1*16+num2;
}
return tmp;
}
具体参考:http://blog.csdn.net/vevenlcf/article/details/17716053
抓到的包:请求标示符 8100 响应 8200
【图片有点问题,自行抓包!!!】
netbios 在139 会话中 与SMB 协议一起联合使用。NBSS 中获取 user 用户名。SMB可以获取 通过网络邻居 访问的路劲, 但是 由于 会话时间问题,可能会中断会话,但是用户仍然需要 继续操作,所以还是建议 通过写文件的操作 来将 一级目录存取下来,然后通过tree_id来鉴别文件中的path,最后在与获取的二级目录相连接,注意的是,netbios会话中的包,中文是连续的,使用的unicode 编码。转换为utf8的比列 1:2. 但是 英文的却不是连续的 中间 穿插了一个00,所以 解码的时候需要注意,英文只占一个字符长度。
4、telnet
一个TELNET连接就是一个用来传输带有TELNET控制信息数据的传输控制协议(TCP)的连接。服务器使用端口号23
telnet是实时的,终端每一次的输入都会产生必要的响应。 请求标示符| ff fd 25| 响应的标示符|ff fb 25|。
5、IMAP 协议 --RFC3501
IMAP 运行在TCP/IP上,使用的端口是143 ,当前用的是imap4.
MAP4和POP3的区别
IMAP和POP3的区别,简单来说,imap只拿邮件头下来,邮件仍在服务器上,可以节约远端的下载时间,不需要全部下载,可以通过客户端直接对邮件进行操作。
POP3提供了快捷的邮件下载服务,用户可以利用POP3把邮箱里的信下载到PC上进行离线阅读。一旦邮件进入PC的本地硬盘,就可以选择把邮件从服 务器上删除,然后脱离与Internet的连接并选择在任何时候阅读已经下载的邮件。
IMAP同样提供了方便的邮件下载服务,让用户能进行离线阅读,但IMAP能完成的却远远不只这些。首先,IMAP提供的摘要浏览功能可以让你在阅读 完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。也就是说,你不必等所有的邮件都下载完毕后才知道究竟邮件里都有 些什么。如果你根据摘要信息就可以决定某些邮件对你毫无用处,你就可以直接在服务器上把这些邮件删除掉,而不必浪费你宝贵的上网时间。
具体: http://www.doc88.com/p-0827384311550.html
SMTP,POP,QQ,FTP 待续。。。。。。。。。