① 知名端口(Well-Known Ports)
知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。
② 动态端口(Dynamic Ports)
动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号[13,14]。
2.3 WinPcap介绍
WinPcap主要用于实现在微软平台下捕获数据包。可以提供Winpcap可以为应用程序提供访问网络底层的能力。主要功能包括[15]:
a:捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;
b:在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;
c:在网络上发送原始的数据包;
d:收集网络通信过程中的统计信息。
2.4 Winsock介绍
套接字(Socket)起源于UNIX,其最初目的是为了在UNIX系统下实现TCP/IP协议,所开发的应用程序接口API(Application Program Interface)。在WINDOWS规范下的API就称之为WinSock接口。它包含了一组针对WINDOWS的扩展库函数,使得可以充分利用WINDOWS编程机制进行简化编程。
实际上,Winsock为计算机提供了一个通讯接口,通过这个接口可以与任意一个装有该接口的终端通信,可以将Winsock看做两个终端之间的高速通道,当建立了这种连接之后,两台计算机就可以通过向连线里面直接书写内容,这样就可以跳过复杂的网络底层结构和协议。套接字技术忽略了各个底层通信之间的差异,使得任一两台终端之间的连接成为可能。
提供给用户的套接字主要有两种形式:分为流式套接字以及数据报套接字[16]:
(1) 流式套接字(Stream Socket):流式是最为长用的一种套接字类型,采用TCP协议,提供了一种可靠的面向连接的双向的连接服务,实现了数据无出错,不会重复发送且按照一定顺序的数据传输。,将数据看做字节流,因此并无数据长度限制,因此流式套接字主要用于大量的数据或按顺序发送数据时使用。
(2) 数据报套接字(Datagram Socket):采用UDP协议使用的接口,提供无连接服务,数据通过相互独立的报文传输,不提供错误检测,也不保证有序和是否重复。在实际使用中统一数据不能保证同一数据包只发送一次,有可能发送多次,直到对方响应为止。
下面介绍几个重要的API的函数及功能如表2-2[17]:
表2-2 常用Win Socket API表
函数 功能
Bind() 调用bind函数来给其绑定一个IP地址和一个特定的端口号
Listen() 调用listen函数使其流套接字s处于监听状态
Connect() 客户Socket s与监听于name所指定的计算机的特定端口上的服务Socket进行连接
Recv() 调用recv函数从TCP连接的另一端接收数据
Send() 调用send函数来向TCP连接的另一端发送数据
Close() 调用close来关闭一个描述符为s套接字
Socket() 调用socket函数来创建一个能够进行网络通信的套接字 WinPcap基于MFC的局域网监控程序的设计与实现(5):http://www.youerw.com/zidonghua/lunwen_11507.html