Windows网络编程
文章平均质量分 84
sunny1996
这个作者很懒,什么都没留下…
展开
-
socket的初始化与IP地址的转换
socket是介于传输层和应用层之间的一个API,它比一般的网络前端更靠近底层,它可以直接基于TCP/UDP协议甚至网络层的IP协议进行编程。WSAStartup()用于初始化windowssockets,返回WSADATA结构体,只有调用了WSAStartup()以后,才能继续调用windowssockets的其它API。需要包含头文件:#include "stdafx.h"#in原创 2017-02-22 17:04:54 · 5579 阅读 · 0 评论 -
利用原始套接字实现对流经本机IP包的捕获
经过上一篇博客的总结,我知道到了原始套接字接收到的字符串的开始字段是IP数据报的首部,所以我想除了之前利用win_pcap可以捕获数据包以外,理论上来说原始套接字也可以实现对IP数据报的捕获。思路也很简单,捕获到字符串以后转换成指向IP首部结构体的指针,再打印相关信息就可以了。当然由于网卡会默认丢掉不属于本机的数据包,所以需要将套接字设置为接收所有数据。win_pcap是直接对网卡进行设置。i原创 2017-03-13 20:14:08 · 2025 阅读 · 2 评论 -
几种网络编程技术在协议栈中的层次
目前学习了普通TCP/UDP套接字,原始套接字,以及win_pcap编程,他们都有发送字符串以及接收字符串的过程,但每种工具所工作的层次是不一样的,发送和接收的字符串所处协议栈的位置也是不一样的。现总结如下:原创 2017-03-13 16:12:38 · 851 阅读 · 0 评论 -
win_pcap模拟syn_flood攻击
syn_flood攻击得原理很简单,通过向目的主机发送大量建立TCP连接得请求,但源IP地址是乱填的,所以本机不会收到TCP应答,而其它主机收到TCP应答后由于之前并没有请求过TCP连接,所以会丢弃这个应答,导致被攻击的主机空等一段时间,资源被白白浪费。当然这也是理论上的结果,实际上在现在,这种攻击肯定是行不通的。#include #include #include #include原创 2017-03-12 21:04:00 · 3760 阅读 · 3 评论 -
利用win_pcap实现解析经过本机的IP包
我们电脑上的网卡有一个重要功能就是判断每一个到自己这的数据帧是不是发给自己的,如果不是的话会主动丢弃,从而保证了因特网的一定的安全性。而利用win_pcap将网卡设置为混杂模式可以捕获网卡上的所有经过的数据包。首先利用pcap_findalldevs()函数获取已连接的网络适配器列表。int pcap_findalldevs( pcap_if_t * * alldevsp原创 2017-03-12 12:18:08 · 2946 阅读 · 0 评论 -
socket实现Ping命令
实现的原理还是很简单的,主要还是要对ICMP协议有所了解。ICMP协议是在IP协议的数据部分实现的,普通的socket只能建立TCP或者UDP连接,实在传输层上做东西,只能控制要传输的数据,不能控制IP包的数据部分(即ICMP包实现的部分),所以我们需要一个原始套接字填充IP协议的数据部分。#define WIN32_LEAN_AND_MEAN#include "stdafx.h"#inc原创 2017-03-11 23:07:04 · 11189 阅读 · 0 评论 -
VS2013配置Winpcap开发环境
Start本文以Visual Studio 2013和WinPcap 4.1.3作为示例,对32位和64位Win7通用1、下载并安装WinPcap运行库http://www.winpcap.org/install/default.htm一些捕包软件会捆绑安装WinPcap,MentoHust也会附带WinPcap,这种情况下一般可以跳过此步。2、下载WinPcap开发包ht转载 2017-03-11 15:30:01 · 2257 阅读 · 0 评论 -
利用select异步I/O模型实现群聊
之前所有写的socket程序都是“同步阻塞”的,这里的“同步”是指,应用中的函数调用与相应的操作系统内核中的函数是同步的,“阻塞”指的是当accept,recv,send等函数还没有确认/接收/发送时,相应的线程处于等待状态,无法继续往下执行。“同步阻塞”虽然易于理解与实现,但是是一种效率很低的模式,因为当阻塞的时候,这个线程是不能干任何事情的,因此,“异步非阻塞”是一种效率更高的方式。利原创 2017-03-20 23:08:07 · 1775 阅读 · 1 评论 -
windows网络编程socket选项与广播的实现
调用getsockopt和setsocketopt可以查看和设置socket中的一些选项,比如socket是否处于监听状态,是否允许广播,是否允许路由选择等等。1.getsockopt()int getsockopt(SOCKET s,int level,int optname, char* optval, int* optlen)s:要查看的套接字level:选项的级别,有SOL原创 2017-03-06 17:13:56 · 2940 阅读 · 0 评论 -
windows网络编程 gethostbyname()
1.gethostbynamegethostbyname()可以根据主机的域名得到相关的信息,它返回一个指向hostent类型的指针。gostent结构体定义如下:struct hostent { char *h_name; char **h_aliases; int h_addrty原创 2017-03-06 15:57:34 · 3328 阅读 · 0 评论 -
UDP全双工通信的实现
要解决全双工通信需要开两个线程,一个发送线程,要监听键盘的输入,另一个是接收线程,要监听接收队列。c++的多线程编程问题在此不在这里叙述了,以后可能会单独写一篇总结一下。由于是全双工,所以原创 2017-02-26 10:50:46 · 9975 阅读 · 0 评论 -
socket实现TCP通信
TCP是一种可靠的,面向连接的协议。在socket中,建立TCP连接的过程大致如下:服务器端:1.初始化套接字2.创建服务器socket3.将本机地址与服务器socket绑定在一起4.服务器开始监听5.服务器确认请求(确认之前时一种阻塞的状态),accept()函数生成一个新的套接字。6.接收客户端发来的字符串客户端:1.初始化套接字原创 2017-02-22 22:12:25 · 2848 阅读 · 1 评论 -
socket实现UDP通信
UDP与TCP不同,是一种无连接的通信方式,相比TCP而言更加灵活。利用socket实现UDP的方式相比TCP而言也更加简单。发送方:1.初始化套接字2.创建socket3.利用sendto发送数据(TCP是send)4.关闭socket接收方:1.初始化套接字2.创建socket并与本机进行绑定3.利用recvfrom接收数据4.关闭socket原创 2017-02-23 10:40:46 · 4263 阅读 · 0 评论 -
socket中三种地址结构体的关系
struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ };说明:sa_family:是2字节的地址家族,一般都是“AF_xxx”的形式,它的值包括三种:AF_INET,AF_INE原创 2017-02-22 17:17:03 · 2520 阅读 · 0 评论 -
利用原始套接字实现tracert路由追踪
在windows的命令行下,使用tracert 域名/IP地址 可以记录本机到目的主机所经过的路由器的IP地址。这个功能使用原始套接字也可以实现。我们通过不断地向目的主机发送ICMP-ECHORequest包,并且将包的TTL一开始设为1,这样一到达网关路由器后,路由器就检测到这个包超时了(TTL=0了),于是就会丢弃次包,并返回一个ICMP超时报文,在ICMP超时报文中,包含了路由器的IP地原创 2017-03-14 09:52:31 · 3509 阅读 · 1 评论