摘要:我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只包括应用层数据。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等。通过原始套接字,我们可以抓取所有发送到本机的IP包(包括IP头和TCP/UDP/ICMP包头),也可以抓取所有本机收到的帧(包括数据链路层协议头)。普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以。利用原始套接字,我们可以自己构造IP头。有两种原始套接字一种是处理IP层即其上的数据,通过指定socket第一个参数为AF_INET来创建这种套接
阅读全文
12 2012 档案
摘要:☛广播包的概念广播包通常为了如下两个原因使用:1 一个应用程序希望在本地网络中找到一个资源,而应用程序对于该资源的地址又没有任何先验的知识。 2 一些重要的功能,例如路由要求把它们的信息发送给所有找到的邻机。被广播信息的目的地址取决于这一信息将在何种网络上广播。Internet域中支持一个速记地址用于广播-INADDR_BROADCAST。由于使用广播以前必须捆绑一个数据报套接口,所以所有收到的广播消息都带有发送者的地址和端口。广播通信是无连接的通信,通信前不需要建立连接。不需要listen和accept,但需要绑定一个socket用来接收广播。☛广播包的发送创建socket设置socket,
阅读全文
摘要:利用winsock编写网络应用程序服务端的步骤简述如下WSAStartup 初始化网络编程库 socket 创建套接字 bind 指定地址、端口,绑定套接字 listen 进入监听状态 accept 等待接收新连接 send/recv 收发数据 closesocket 关键套接字 WSAStartup 释放对动态库的使用 下面详细介绍各API 1. Winsock初始化 调用int WSASta...
阅读全文
摘要:● 字节序的定义字节序,顾名思义字节的顺序,再多说两句就是大于一个字节的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题)。在大部分的开发中我们不需要考虑字节序的问题。唯有在跨平台以及网络程序应用中字节序才是一个应该被考虑的问题。● 网络应用的字节序网络字节序是TCP/IP规定好的一种数据表示格式,它与具体的CPU类型、操作系统无关,从而可以保证数据在不同主机之间传输时能被正确解释。网络字节顺序采用big endian排序方式。在网络编程时,并不是什么时候都要考虑字节序问题。那么什么时候需要考虑呢?Intel CPU使用的都是little endian。实际上如果是应用层的数据,即
阅读全文
摘要:Windows网络编程使用winsock。Winsock是一个基于Socket模型的API,在Windows系统中广泛使用。使用Winsock进行网络编程需要包含头文件Winsock2.h,需要使用库ws2_32.lib,包含方法:可以使用语句来告诉编译器连接该库#pragma comment(lib, “ws2_32.lib”);如果使用VS,可以通过“项目” --> “XX属性”--> “连接...
阅读全文
摘要:当进程结束后所有线程都终止。多线程编程最大的问题在于共享数据的访问控制。直接用Win32 API进行编程有很多优点:基于Win32的应用程序执行代码小,运行效率高。但是它要求程序员编写的代码较多,且需要管理所有系统提供给程序的资源。▶创建线程HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize, // initial stack size LPTHREAD_START_ROUTINE lpStartAddress, // thread fu...
阅读全文

浙公网安备 33010602011771号