网络编程
kanguolaikanguolaik
2013.08.07 今天是个好日子
展开
-
《UNIX网络编程01》 第七章 套接口选项 getsockopt、setsockopt
#include#include#includeint main(){ int sockSrv = socket(AF_INET,SOCK_STREAM,0); int data = 60000, len = sizeof(int); setsockopt(sockSrv,SOL_SOCKET,SO_RCVBUF,&data,len); data = -1; len =原创 2012-11-18 20:43:22 · 808 阅读 · 0 评论 -
Shutdown、Close的区别
终止网络连接的方法有2种:close和shutdown。close有2个限制,可以用shutdown来避免。一、引用计数 close把描述子的引用计数减1,仅在该计数变为0的时候才关闭套接字。 而是用shutdown不管引用计数的值是多少,都激发TCP的正常连接终止序列,也就是发送FIN。二、关闭读或写 close终止数据传送的两个方向:读和写原创 2013-09-17 11:19:23 · 1545 阅读 · 0 评论 -
Linux防火墙:iptables(netfilter)、ipchains、ipfwadm
一、Linux包过滤防火墙:ipfwadm、ipchains、iptables1.1 ipfwadm 在2.0.x的内核中,采用ipfwadm来控制内核包过滤规则。1.2 ipchains 在2.2.x的内核中,采用ipchains来控制内核包过滤规则。1.3 iptables 在2.4.x的内核中,采用iptables来控制内核包过滤规则。原创 2013-09-22 10:52:01 · 1605 阅读 · 0 评论 -
Linux内核编程:第一个Linux内核代码
生成testtcp.ko模块,添加到内核。添加该模块后,每个由该机器发出的数据包,如果是TCP协议,且源端口为81,将其改为RST包发出。一、代码1.1 文件:testtcp.c#include #include #include #include #include #include #include #include #include #include #原创 2013-09-24 10:38:47 · 1523 阅读 · 0 评论 -
原始套接字编程:raw socket
raw socket即原始套接字编程:一、udp发送数据1.1 代码代码的意义是:执行dig @8.8.8.8 www.guowenyan.cn,抓包获取二进制信息。 利用raw socket发送该二进制信息,相当于执行了dig命令。#include #include #include #include #include #include using namespac原创 2014-02-10 15:31:05 · 1839 阅读 · 0 评论 -
几个名词:PV/UV/IP、QPS/TPS
一、PV/UV/IP1.1 名词解释 PV (Page View) 页面浏览量 用户每一次对网站中的每个页面访问均被记录1次。用户对同一页面的多次刷新,访问量累计。 UV (Unique Visitor) 独立访客 通过访问电脑的cookies实现。 IP原创 2014-02-26 11:02:46 · 4476 阅读 · 1 评论 -
常用:计算IP、UDP校验和、判断合法IP地址
一、IP、UDP校验和1.1 代码#include #include //struct in_addrusing namespace std;#pragma comment(lib,"Ws2_32.lib")unsigned short ip_cksum(unsigned short *buf, int len){ //将每个16bit求和,和为32bit unsign原创 2014-02-17 14:29:46 · 2044 阅读 · 0 评论 -
网络攻击:半连接攻击(SYN攻击)、全连接攻击、RST攻击、IP欺骗、DNS欺骗、DOS/DDOS攻击
一、半连接攻击二、全连接攻击三、RST欺骗四、IP欺骗 行动产生的IP数据包为伪造的源IP地址,以便冒充其他系统或发件人的身份。五、DNS欺骗5.1 定义 攻击者冒充域名服务器的一种欺骗行为。5.2 原理 如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网只能看到攻击者的主页原创 2013-09-17 16:39:08 · 13647 阅读 · 1 评论 -
tcp中RTO的计算及相关开源实现(Linux内核、unbound)
一、概念RTT:往返时延RTO:原创 2014-09-24 15:48:54 · 2483 阅读 · 0 评论 -
Socket Server 代码:UDP
一、server端#include #include #include #include #include int main(int argc, char*argv[]){ int sockfd = socket(AF_INET, SOCK_DGRAM, 0); struct sockaddr_in addrSrv; bzero(原创 2015-03-25 22:28:18 · 607 阅读 · 0 评论 -
Linux IO复用之select
select:#include #include #include int main(){ int sockSrv = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addrSrv; bzero(&addrSrv, sizeof(addrSrv)); addrSrv.sin_family = AF_INET;原创 2013-03-28 10:57:53 · 1086 阅读 · 0 评论 -
TCP协议RST:RST介绍、什么时候发送RST包
一、RST介绍 RST标示复位、用来异常的关闭连接。 1. 发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓冲区中的包,发送RST。 2. 而接收端收到RST包后,也不必发送ACK包来确认。二、什么时候发送RST包 1. 建立连接的SYN到达某端口,但是该端口上没有正在 监听的服务。原创 2013-09-17 12:04:25 · 87714 阅读 · 6 评论 -
半连接、半打开、半关闭
一、半连接1.1 定义 发生在TCP3次握手中。 如果A向B发起TCP请求,B也按照正常情况进行响应了,但是A不进行第3次握手,这就是半连接。1.2 半连接攻击 半连接,会造成B分配的内存资源就一直这么耗着,直到资源耗尽。二、半打开(Half-Open)2.1 定义 如果一方已经关闭或异常终止连接,而另一方却不知道。 我原创 2013-09-17 11:47:03 · 9527 阅读 · 0 评论 -
Linux IO复用之epoll
epoll#include #include #include #include int main(){ int epfd = epoll_create(256); int sockSrv = socket(AF_INET, SOCK_STREAM, 0); struct epoll_event ev; ev.data.fd = sockSrv; ev.event原创 2013-03-28 10:36:23 · 936 阅读 · 0 评论 -
《UNIX网络编程01》 第十一章 高级名字与地址转换 getnameinfo
getnameinfo:#include #include #include #include int main(){ struct sockaddr_in addrSrv; bzero(&addrSrv, sizeof(addrSrv)); addrSrv.sin_family = AF_INET; addrSrv.sin_addr.s_addr = inet_add原创 2013-03-21 17:39:07 · 905 阅读 · 0 评论 -
Linux简单Socket编程示例
Server端:#include #include #include #include int main(){ int sockSrv = socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in addrSrv; bzero(&addrSrv,sizeof(addrSrv)); addrSrv.sin_family =原创 2013-03-21 14:55:40 · 960 阅读 · 0 评论 -
《UNIX网络编程01》 第十三章 高级I/O函数 readv、writev
readv、writev#include#include#includeint main(){ int fd = open("aaa",O_RDWR); struct iovec buf[2]; /* buf[0].iov_base = malloc(3); buf[0].iov_len = 3; buf[1].iov_base = malloc(2);原创 2012-11-22 11:18:30 · 731 阅读 · 0 评论 -
《UNIX网络编程01》 第十一章 高级名字与地址转换 gethostbyname_r、gethostbyaddr_r
gethostbyname_r、gethostbyaddr_r#include#includeint main(){ struct hostent hostbuf,*res = NULL; char buf[8192] = {0}; int err = 0; //gethostbyname_r("www.baidu.com",&hostbuf,buf,sizeof(原创 2012-11-19 17:05:53 · 1582 阅读 · 0 评论 -
《UNIX网络编程01》 第九章 基本名字与地址转换 gethostbyname、gethostbyaddr、uname
gethostbyname、gethostbyaddr、uname#include#include#includeint main(){ struct hostent *pHost = NULL; in_addr_t addr = inet_addr("127.0.0.1"); pHost = gethostbyaddr((char*)&addr,4,AF_INET);原创 2012-11-18 22:44:47 · 675 阅读 · 0 评论 -
开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ
开源C/C++网络库:ACE C++语言 跨平台Boost的ASIO C++语言 跨平台libevent C语言 主要支持linux,新版增加了对windows的IOCP的支持libev C语言 只支持linux,只封装了EPOLL模型层次架构:ACE:底层是OS适配层,上一层C++的wrap类,再上一层框架(Acc原创 2013-05-23 09:11:29 · 9580 阅读 · 1 评论 -
《UNIX网络编程01》 第十一章 高级名字与地址转换 getaddrinfo
getaddrinfo、gai_strerror、freeaddrinfo#include#include#includeint main(){ struct addrinfo hints,*res; bzero(&hints,sizeof(hints)); struct utsname Name; uname(&Name); int nRet = getaddrin原创 2012-11-19 16:23:23 · 771 阅读 · 0 评论 -
5种网络IO模型、Reactor、Proactor
网络IO模型包括:阻塞I/O、非阻塞I/O、I/O复用(select和poll)、信号驱动I/O(SIGNO)、异步I/O(Posix的aio_系列函数)一、同步IO模型1.1 阻塞I/O1.2 非阻塞I/O1.3 I/O复用(select和poll)1.4 信号驱动I/O(SIGNO)二、异步IO模型异步I/O(Posix的ai原创 2013-09-10 14:48:45 · 3238 阅读 · 0 评论 -
Socket Server 代码, Window/Linux
Windows下一、代码二、运行Linux下原创 2013-09-16 17:48:27 · 5660 阅读 · 0 评论 -
Socket Server: TCP 多线程版
一、Server端#include #include #include #include #include int main(int argc, char*argv[]){ int sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addrSrv; bzero原创 2015-03-26 23:03:05 · 799 阅读 · 2 评论