Hello,我是修齊。
学习C++的第一百零三十天,用心学习。
在这里记录一些学习的东西和学习的心情,内容主要是一些自己学习整理的小笔记。
1.协议栈是不会把网卡收到的数据全部复制到原始套接字上的,需要抓包分析网络数据包应该怎么办?
2.Winsock设置套接字控制台命令SIO_RCVALL(允许原始套接字能接收所有经过本机的网络数据包)。
3.设置方法:利用API函数WSAIoctl来发送I/O命令。
4.原始套接字抓取所有IP包,应注意:
·SIO_RCVALL系统中并没有暴露给我们使用,需自定义。 ·SIO_RCVALL目前只能用于IPv4,因此在创建原始套接字的时候协议簇必须是AF_INET。 ·使用sock函数创建原始套接字的时候,协议类型参数要为IPPROTO_IP: sockfd=socket(AF_INET,SOCK_RAW, IPPROTO_IP); ·必须将原始套接字绑定到本地的某个网络接口
5.ping命令几乎是Windows系统或Linux系统下最常用的网络命令。
6.探测网络上某个主机是否可达,只要在本机命令行下输入ping命令即可知道。
7.ping命令基本用法:后面直接加IP地址。如:ping192.168.1.1。
8.ping命令的本质是发送ICMP协议的网络数据包。
1.MFC提供了两个封装Winsock API的类:CAsyncSocket,CSocket。
2.CSocket是CAsyncSocket的子类。
3.类CAsyncSocket使用异步套接字,类CSocket使用同步套接字。
4.CAsyncSocket类是从Object类派生,CAsyncSocket对象称为异步套接字对象。
5.使用CAsyncSocket之前,必须调用AfxSocketInit初始化WinSock环境。
6.AfxSocketInit会创建一个隐藏的CSocketWnd对象,是一个窗口对象,由CWnd派生,因此可以接收窗口消息。
7.类CAsyncSocket常见成员:
·Create函数: ·Attach函数: ·FromHandle函数: ·GetLastError函数: ·GetPeerName函数: ·GetSockName函数: ·Accept函数: ·Bind函数: ·Connect函数: ·Listen函数: ·Send函数: ·SendTo函数: ·Receive函数: ·ReceiveFrom函数: ·OnAccept函数: ·OnConnect函数: ·OnSend函数: ·OnReceive函数: ·AsyncSelect函数: ·Close函数:
8.CAsyncSocket类用DoCallBack函数处理MFC消息,当一个网络事件发生时,DoCallBack函数按网络事件类型:
FD_READ:套接字中有数据需要读取时触发事件。 FD_WRITE:通知可以写数据。 FD_ACCEPT:通知监听套接字有连接情求可以接受。 FD_CONNECT:通知情求连接的套接字,连接的要求已经被处理。
分别调用OnReceive,OnSend,OnAccept,OnConnect函数。
9.MFC把事件处理函数定义为虚函数,因此要生成一个新的C++类,以重载这些函数。
1.为了给程序员提供更方便的接口以自动处理网路任务。
2.类CSocket通常和类CSocketFile,CArchive一起进行数据收发,前者将CSocket 当作一个文件,后者完成在此文件上的读写操作。
3.CSocket基本成员:
.Create函数: Attach函数 FromHandle IsBlocking CancelBlockingCall
4.基本用法:不直接使用CSocket,而派生出自己的套接字类,然后在派生类中对这些虚函数进行重载处理,加入应用程序对网络事件处理的特定代码。
上述内容如有侵权,联系即删。
感谢阅读-感谢支持



