![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Network
文章平均质量分 92
lishuhuakai
这个作者很懒,什么都没留下…
展开
-
简易的sniffer程序
真的很简易,这个程序仅仅是抓一些发送到本机的数据包,然后显示出来它们的一些信息罢了! 程序非常简单! #include #include #include #include #pragma comment(lib, "ws2_32.lib") /*链接ws2_32.lib动态链接库*/#define SIO_RCVALL _WSAIOW(IOC_VENDOR,原创 2014-06-05 17:27:36 · 3937 阅读 · 0 评论 -
开始读redis的源码了
Redis是一个很简单的nosql类型的数据库,代码量相对来说是比较少的.但是代码风格确实比较漂亮.我打算花一段时间剖析一下它的代码,不光是看啦,看的话,收获是不大的.我打算从Redis那纷繁复杂,令人眼花缭乱的代码里剥出一个单机的数据库,能够运行的,但是没有那么多的错误处理代码,这样以来既可以学到作者的代码风格,也可以看到如何来实现一个数据库,同时还可以学习网络编程,确实是一举多得的原创 2016-11-24 15:54:03 · 10296 阅读 · 5 评论 -
一起来写ftp server 01 -- 简易版本
一些坑,踩了就好了.写这个ftp server只是为了练一下手,写这种文章只是想记录一下我在编写这个ftp server的过程中的一些想法和收获.虽然编写这个玩意有点耗时,但是有一些坑,你不踩,你永远都不知道.我们应该用什么样的方式来实现我们的程序?这是一个老生长谈的问题,使用多线程,多进程还是别的什么方式?鉴于我们已经有了一个web server的经验,我们自然会想,可不可以采取多线程的方式来处原创 2016-11-15 21:27:58 · 3179 阅读 · 0 评论 -
邮件正文及其附件的发送的C++实现
这段代码我花了整整一天来编写,如果转载,请注明出处,谢谢! 前面的一篇文章已经讲了如何发送邮件正文,原理我就不再叙述了,要了解的同学请到这里查看! 网上很多发送邮件附件的代码都不能用,所以我用心写了一个,直接封装成了一个类,需要的同学可以直接调用这个类来发送邮件,使用的是纯C++,不含MFC,请放心使用。(在VS2013下测试完美通过!) 废话不多说,直接上代码! Sm原创 2014-05-31 21:00:30 · 21642 阅读 · 53 评论 -
简易HTTP代理的实现
编写一个简易的HTTP代理服务器,步骤其实很简单: 1.设置一个监听套接字gListen_Socket; 2.每当接受到客户端的请求之后,我们构建一个新的线程来继续监听客户端的请求,然后原线程处理用户请求; 3.先从用户发送的HTTP请求中解析出服务器端的主机地址,然后通过另外一个线程连接到服务器; 4.本程序充当中介,不断转发来自两端的消息;原创 2014-05-23 12:30:30 · 14760 阅读 · 4 评论 -
一个简易的基于tun/tap设备的协议栈
从上一次准备开坑开干,到现在初步完成,已经过了一个半月了,造一个轮子确实是非常耗时耗力的一件事情,但是不管怎样,我终究还是做完了,完成了当初的目标,虽然代码还有非常多值得改进的地方,但是现在已经不是很着急了,一步一步慢慢来吧,接下来的一段时间里,我会将这个协议栈背后涉及到的一些知识贴成博文,但是我不会去讲实现,没有任何意义.自己去读吧,代码非常简洁.接下来一直到毕业,估计都很难像这个学期一样,花上这原创 2017-05-27 13:49:30 · 1718 阅读 · 0 评论 -
带界面的简易邮件客户端参考程序
有界面,大家可以参考一下!先发一下实现了大部分功能的邮件客户端! http://pan.baidu.com/s/1ntLUVyx 可以实现发送附件的邮件客户端课程设计完成后放出!原创 2014-06-05 10:51:32 · 3319 阅读 · 2 评论 -
TUN/TAP设备浅析(三) -- TUN/TAP设备的应用
上一篇文章主要讲述了TUN/TAP设备的一些原理,你可能会好奇,TUN/TAP设备究竟有什么用处呢?所以这篇文章,我想用一些实际的例子来回答这个问题。例子源自陈硕老师的博客,博文中关于TUN/TAP设备的使用非常典型,对原文感兴趣的同学可以查看这里:http://blog.csdn.net/solstice/article/details/6579232背景:在一台 PC 机上模拟 TCP 客户端程转载 2017-06-12 21:41:14 · 4282 阅读 · 0 评论 -
TUN/TAP设备浅析(二) -- TUN/TAP的编程
这篇文章想详细阐述一下有关于 TUN/TAP 设备的编程。其实关于这两种设备的编程,基本上属于八股文,大家一般都这么干。启动设备之前有的linux 并没有将tun 模块编译到内核之中,所以,我们要做的第一件事情就是检查我们的系统是否支持 TUN/TAP 。具体如何检查和解决,请查看这里http://blog.csdn.net/lishuhuakai/article/details/70305543,原创 2017-06-12 21:37:27 · 4692 阅读 · 0 评论 -
TUN/TAP设备浅析(一) -- 原理浅析
TUN/TAP设备浅析TUN设备TUN 设备是一种虚拟网络设备,通过此设备,程序可以方便地模拟网络行为。TUN 模拟的是一个二层设备,也就是说,通过它可以处理来自网络层的数据,更通俗一点的说,通过它,我们可以处理 IP 数据包。先来看看物理设备是如何工作的:上图中的 eth0 表示我们主机已有的真实的网卡接口 (interface)。网卡接口 eth0 所代表的真实网卡通过网线(wire)和外部网络原创 2017-06-12 21:34:56 · 24815 阅读 · 1 评论 -
tcpdump抓包命令
我并没有写这些东西,我做的事情仅仅是将网上的一些东西整合了起来,然后删掉了一些不常用的命令,仅此而已.tcpdump抓包命令tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdu转载 2017-06-12 21:50:57 · 5998 阅读 · 0 评论 -
一起来写ftp server 03 -- 加强版本
这一次的版本我们在第一版的基础上添加了一些有意思的东西,增强了我们的功能.下载限速和上传限速代码的实现里有一些很有意思的地方,下载限速和上传限速就是其中一例,这些东西听起来非常高大上,可是如果你真的做了的话,会发现这些东西真的也就是这样.限速的原理很简单,如果发现下载速度过快,那么我就休息一下,不下那么快,这样速度就降下来的.上传同理.SpeedBarrier/* 下载或者上传速度限制器 */cl原创 2016-11-15 22:42:38 · 945 阅读 · 0 评论 -
一起来写ftp server 02 -- 一次失败的尝试
上一个版本之中,最基本的功能已经实现了,但是可以明显地看得到, CmdHandle这个类过大,而DataHandle这个类又过小,所以,我想平衡一下,将CmdHandle这个类的数据传输部分分散至DataHandle这个类中,起先并没有想太多,只是想这么来干一下.这里需要注意一下的是,CmdHandle和DataHandle两个类的代码分别在两个进程中执行.不过,写着写着,我发现,这个想法是很愚蠢的原创 2016-11-15 21:59:35 · 944 阅读 · 0 评论 -
Win32如何定义IP数据报的首部
Win32如何定义IP数据报的首部 文章出资[摘要]本文介绍Win32如何定义IP数据报的首部,包括IP数据报首部的定义、TCP报文段首部的定义和UDP报文段首部的定义相关内容。在进行网络编程时,可能需要直接操作原始的IP数据报,例如编写网络嗅探器。此时要定义一个表示IP数据报首部的结构体来获取首部中的各个信息,问题也随之而来:平时我们使用的数据都是B转载 2014-05-30 09:47:02 · 1354 阅读 · 0 评论 -
电子邮件发送的原理以及简易实现
在代码开始之前,我们先原创 2014-05-29 13:04:16 · 19004 阅读 · 6 评论 -
简易电子邮件收信的原理以及实现
上面一篇已经jiang原创 2014-05-29 23:35:43 · 5314 阅读 · 0 评论 -
一起来写web server 00 -- 准备工作
这篇文章是一个序言,我接下来想用9篇文章来记录一下我逐步迭代完成的这个不算漂亮的作品.server我早已经写完了,代码最后执行的效果如下图所示:上面的http://192.168.44.221:8080/代表的是一个内网地址,端口是8080,这代表这我们的web服务器工作在192.168.44.211这个地址所在的主机,监听于8080号端口.代码运行在ubuntu之上,对于原创 2016-11-03 00:28:13 · 1150 阅读 · 0 评论 -
一起来写web server 01 -- 单进程版本
csdn的markdown编辑器就是一个傻逼.web server的原理如果说,你仅仅是要实现一个简单的网页服务器,ok,这非常简单,用不了多少代码,因为它的原理实在是非常简单.客户端首先通过tcp/ip三次握手连接到服务器,然后向服务器发送http请求,这个请求大概长什么样子呢?我这里举一个栗子:GET /sample.jsp HTTP/1.1\r\nAccept: image/gif.ima原创 2016-11-03 12:52:22 · 1428 阅读 · 1 评论 -
一起来写web server 03 -- 多线程版本
一起来写web server 03 – 多线程版本 错误的代码和正确的代码总是非常相似的!好吧,我们继续开干,这一次,我们来写一个多线程版本的web服务器.这次代码的思想十分简单,那就是一旦从客户端来了一个连接,就生成一个线程来处理这个连接.这种想法和之前的多进程版本非常类似.但是请注意进程和线程之间的差异.进程和线程的区别进程这种东西,一旦父进程调用fork函数,生成了一个子进程,那么子进程原创 2016-11-03 23:54:56 · 1166 阅读 · 1 评论 -
一起来写web server 04 -- 线程池版本
从这个版本开始,后面的代码差不多是越来越难啦.这个版本,我们主要是要实现一个线程池版本的web server.这个版本的设计出自UNP.思想思想非常简单,那就是父线程首先构建n多子线程,这些子线程全部争抢全局的一把锁,只有抢到了锁的线程才能够调用accept函数,否则都会阻塞掉.代码/*- * 线程池版本的web server.主要的思想是事先构建一个线程池,只是需要注意的是,accept的时候需原创 2016-11-04 00:33:34 · 938 阅读 · 1 评论 -
一起来写web server 05 -- 多线程进阶版本
这个版本的web server比第4版稍微做了一点改进,那就是由主线程统一接收连接,然后连接的处理由子线程来完成.因此,这里就引入了条件变量以及同步互斥的问题.同步机制muduo库中有一个关于同步机制的封装,我这里就直接采用了.我这里来介绍一下这个封装吧.下面是Conditon这个类的代码:class Condition : noncopyable{ private: Mu原创 2016-11-04 01:22:23 · 666 阅读 · 0 评论 -
一起来写web server 06 -- 单线程非阻塞IO版本
阻塞IO的效率是在是低下,你如果要写高性能的web server的话,你必须使用非阻塞IO.非阻塞IO的读写在谈到非阻塞IO之前,必须先谈一谈阻塞IO,在网络编程中,我们假设有一个监听套接字的sockfd,这个sockfd是你调用了socket,listen, bind这一大票的函数得到的一个文件描述符.其实它默认就是阻塞的,具体的表现是:使用accept函数监听sockfd时,如果没有连接到来,原创 2016-11-04 08:44:04 · 2133 阅读 · 1 评论 -
一起来写web server 07 -- 单线程非阻塞IO加强版本
这次的这个版本相对于前面的第6个版本有些许加强,那就是将epoll由LT模式变成了ET模式. 对于采用了LT工作模式的文件描述符,当epoll_wait检测到其上有事件发生并且将事件通知应用程序后,应用程序可以不立即处理该事件,这样,当应用程序下次调用epoll_wiat时,epoll_wait还会向应用程序通告此事件,直到该事件被处理.而对于采用ET工作模式的文件描述符,当epoll_wait原创 2016-11-04 09:24:46 · 865 阅读 · 0 评论 -
一起来写web server 02 -- 多进程版本
在UNP的第30章客户/服务器程序设计范式中提到了这种模型.主要的思想这种模型的思想非常简单,具体来说,就是,没当用户connect到来之后,立马fork一个子进程去处理连接,代码如下:int main(int argc, char *argv[]){ int listenfd = Open_listenfd(8080); /* 8080号端口监听 */ while (true) /原创 2016-11-03 23:21:30 · 1301 阅读 · 0 评论