随笔分类 - 网络编程
摘要:一 服务器端#include <winsock2.h>#include <ws2tcpip.h>#include <iostream.h>#include "tpipv6.h"// 所需库连接#pragma comment (lib,"Ws2_32.lib")void main(){ WSADATA wsaData; //版本协商 if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { cout<<"装载socket失败!"<<
阅读全文
摘要:ipv6 socket 编程中遇到的问题1 定义的addrinfo变量在调用getaddrinfo()之前该参数必须清0,否则会出现绑定错误。 因为这个问题卡了俩小时,最后无意间看到一篇文章,问题得到解决。2 客户端地址应该定义为struct sockaddr_storagte类型,否则accept时会出错。 sockaddr_storage有足够大的空间来存储任何类型的sockaddr。3 inet_pton()和inet_ntop()这两个字符串和ip之间的转换函数在Linux下才可用
阅读全文
摘要:IPv6套接字编程1.概述由于互联网用户的日益增加,网络需求日益扩大,IPv4地址也日益紧张。人们为了解决地址日趋耗尽的问题,采用了CIDR、NAT等技术来延缓地址耗尽的速度,但这并不能从根本上解决IPv4目前存在的问题,IPv4地址耗尽只是一个时间问题。随着互联网的发展,Internet骨干路由器的路由表也日益扩大,这使得路由器必须维护大量路由表。由于IPv6可以解决传统的IP技术的瓶颈问题,因此,它会推动整个信息产业的发展。目前,第三代移动技术的基本协议就采用IPv6,这意味着下一代互联网具有移动性,将来手机或其他个人移动终端都将具有全球唯一的IPv6地址,因而IPv6技术将会变得越来越重
阅读全文
摘要:1.Winsock同步阻塞方式的问题在异步非阻塞模式下,像accept(WSAAccept),recv(recv,WSARecv,WSARecvFrom)等这样的winsock函数调用后马上返回,而不是等待可用的连接和数据。在阻塞模式下,server往往这样等待client的连接:while(TRUE){//wait for a connection ClientSocket = accept(ListenSocket,NULL,NULL);if(ClientSocket == INVALID_SOCKET) { ERRORHANDLE } else DoSomething}上述代码简单易用,
阅读全文
摘要:WSAEventSelect模型 WSAEventSelect模型也是I/O模型中较为常用的一个异步模型,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知。该模型最主要是将网络事件投递至一个事件对象句柄。 事件通知事件通知模型要求我们的应用程序针对打算使用的每一个套接字,首先创建一个事件对象。创建方法是调用WSACreateEvent函数,它的定义如下:WSAEVENT WSACreateEvent(void); 函数的返回值很简单,就是一个创建好的事件对象句柄。事件对象句柄到手后,接下来必须将其与某个套接字关联在一起,同时注册自己感兴趣的网络事件类型。调用WSAEven.
阅读全文
摘要:wpcap的过滤器是以已声明的谓词语法为基础的。过滤器是一个ASCII字符串,它包含了一个过滤表达式。pcap_compile()把这个表达式编译成内核级的包过滤器。这个表达式会选择那些数据包将会被堆存。如果表达式没有给出,那么,网络上所有的包都会被内核过滤引擎所认可。不然,只有那些表达式为'true'的包才会被认可。这个表达式包含了一个或多个原语。原语通常包含了id(名字或序列),这些id优先于限定词。以下是三种不同的限定词: 输入(type)指明了哪些东西是id所代表的。可能的输入是host,net和port。比如:`host foo',`net 128.3'
阅读全文
摘要:在以太网环境下将网卡设置在混杂模式下很容易获得整个物理链路上的数据帧,即你可以监听整个网段的主机数据包,可以实现Sniffer的功能,但是在无线局域网环境下(WLAN, IEEE802.11协议族),设置为混杂模式却不能嗅获到数据包,为了解决这个问题我也尝试了很多方面,在一次偶然的情况下看到了一种解决方法,那就是不设置为,打开函数 pcap_open_live(const char* device, int snaplen, int promisc, int to_ms, char *ebuf ) 中的第三项设置为0即可获得本机的所以数据帧,这个时候用函数获得数据包时会发现,得到的802.1.
阅读全文