
一起学linux网络编程
会飞的幸运儿
这个作者很懒,什么都没留下…
展开
-
服务器响应HTTP请求状态码简单注释
服务器响应HTTP请求状态码简单注释 当服务器响应HTTP请求时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。下面是5类状态码的简单注释:1、客户方错误: 100 客户必须继续发出请求 101 客户要求服务器根据请求转换HTTP协议版本2、成功: 200 OK 201 已创建 202转载 2015-01-06 20:39:31 · 501 阅读 · 0 评论 -
原始套接字之PING(3)
ICMP包发送:/*发送ICMP回显请求包*/static void* icmp_send(void *argv){ /*保存程序开始发送数据的时间*/ gettimeofday(&tv_begin, NULL); while(alive) { int size = 0; struct timeval tv; gettimeofday(&tv, NULL); /*当原创 2015-04-19 23:08:23 · 508 阅读 · 0 评论 -
原始套接字之PING(2)
主函数:/*ping.c*/ #include #include #include #include #include #include #include #include #include #include #include /*bzero*/#include #include /*保存已经发送包的状态值*/typedef struct pingm_pakce原创 2015-04-19 19:32:50 · 863 阅读 · 0 评论 -
原始套接字之PING(4)
ICMP响应接收:/*接收ping目的主机的回复*/static void *icmp_recv(void *argv){ /*轮询等待时间*/ struct timeval tv; tv.tv_usec = 200; tv.tv_sec = 0; fd_set readfd; /*当没有信号发出一直接收数据*/ while(alive) { int ret = 0;原创 2015-04-19 23:13:36 · 481 阅读 · 0 评论 -
原始套接字之PING(6)
发送ICMP数据的时候要进行,ICMP报头填充:/*设置ICMP报头*/static void icmp_pack(struct icmp *icmph, int seq, struct timeval *tv, int length ){ unsigned char i = 0; /*设置报头*/ icmph->icmp_type = ICMP_ECHO; /*ICMP回显请求*/原创 2015-04-20 22:13:08 · 511 阅读 · 0 评论 -
原始套接字之PING(5)
在发送包状态数组pingpacket[128]中,找到空闲的位置:在main函数中初始化了:memset(pingpacket, 0, sizeof(pingm_pakcet) * 128);/*查找一个合适的包位置*当seq为-1时,表示查找空包*其他值表示查找seq对应的包*/static pingm_pakcet *icmp_findpacket(int seq){ int原创 2015-04-20 21:55:07 · 605 阅读 · 0 评论 -
原始套接字之PING(7)
接收到数据进行解包:/*解压接收到的包,并打印信息*/static int icmp_unpack(char *buf,int len){ int iphdrlen; struct ip *ip = NULL; struct icmp *icmp = NULL; int rtt; ip=(struct ip *)buf; /*IP头部*/ iphdrlen=ip-原创 2015-04-21 22:58:02 · 478 阅读 · 0 评论 -
原始套接字之PING(8)
计算发送到接收到响应的时间差:/*计算时间差time_sub参数: end,接收到的时间 begin,开始发送的时间返回值: 使用的时间*/static struct timeval icmp_tvsub(struct timeval end,struct timeval begin){ struct timeval tv; /*计算差值*/ tv.tv_sec = en原创 2015-04-21 23:12:00 · 530 阅读 · 0 评论 -
原始套接字之PING(9)
在main函数中有信号的注册:/*截取信号SIGINT,将icmp_sigint挂接上*/signal(SIGINT, icmp_sigint);/*终端信号处理函数SIGINT*/static void icmp_sigint(int signo){ alive = 0; /*告诉接收和发送线程结束程序*/ gettimeofday(&tv_end, NUL原创 2015-04-21 23:14:47 · 986 阅读 · 0 评论 -
pcap文件
PCAP文件结构:如上图所示在一个Pcap文件中存在1个Pcap文件头和多个数据包,其中每个数据包都有自己的头和包内容。下面我们先看看PCAP文件头每个字段:magic为文件识别头,pcap固定为:0xA1B2C3D4。(4个字节)magor version为主版本号(2个字节)minor version为次要版本号(2个字节)timezone为当地原创 2015-05-10 22:14:57 · 810 阅读 · 0 评论 -
原始套接字之ping(1)
ICMP数据格式:PING数据格式:PING程序流程:原创 2015-04-19 19:15:19 · 555 阅读 · 0 评论 -
UDP校验
UDP结构由首部和数据两部分组成。 首部由8个字节。包括:1.源端口号,两个字节2.目的端口号,两个字节3.长度,两个字节。UDP用户数据包的总长度。以字节为单位。4.检验和,两个字节。用来检验UPD伪首部、数据部分、首部。和IP分组首部校验方法一样。 其中伪首部:又称伪包头,是指在TCP分段或者UDP数据格式中,在数据包首部前面增加源地址、目的地址、转载 2015-03-15 15:09:37 · 1588 阅读 · 0 评论 -
TCP服务端和客户端(5)
在原来代码的基础上,先调用signal()注册SIGINT和SIGPIPE信号的处理函数,然后连接服务器并进行数据处理。#include #include #include #include #include #include #include #include extern void sig_proccess(int signo);extern void sig_pipe(原创 2015-01-19 20:40:28 · 382 阅读 · 0 评论 -
UDP服务端和客户端(1)
于TCP程序设计相比较,UDP缺少了conncet、listen、accetp函数。所以就是无连接的特性,不用维护连接,断开等状态。大致交互如图:原创 2015-02-01 22:14:14 · 799 阅读 · 0 评论 -
TCP服务端和客户端(8)
在process.c的基础上,继续变换方案,将使用到readv和writev。并且使用到向量方式进行数据的发送和接收。#include #include #include #include #include static struct iovec*vs=NULL,*vc=NULL;void process_conn_server(int s) /*服务器对客户端的处理*/{原创 2015-01-21 21:34:11 · 645 阅读 · 0 评论 -
TCP服务端和客户端(7)
在之前process.c代码的基础上,添加了信号处理函数的定义。 #include #include #include /*服务器对客户端的处理*/void process_conn_server(int s){ ssize_t size = 0; char buffer[1024]; /*数据的缓冲区*/ for(;;){ /*循原创 2015-01-21 17:17:55 · 520 阅读 · 0 评论 -
TCP服务端和客户端(6)
在原来服务端的代码基础上,加上两个信号处理过程。 #include #include #include #include #include #include #include #include extern void sig_proccess(int signo);extern void sig_pipe(int signo);#define PORT 888原创 2015-01-20 20:28:54 · 428 阅读 · 0 评论 -
TCP服务端和客户端(4)
现在来解析服务端和客户端中使用的处理函数。代码:#include #include /*客户端的处理过程*/void process_conn_client(int s){ ssize_t size = 0; char buffer[1024]; /*数据的缓冲区*/ for(;;){ /*循环处理过程*/ /*从标准输入中读取数据放到缓冲原创 2015-01-11 21:28:25 · 593 阅读 · 0 评论 -
TCP服务端和客户端(9)
继续对process.c代码进行改进,用recvmsg和sendmsg来进行替换。将向量挂载到msghdr的msg_iov的成员变量上进行操作。#include #include #include #include #include #include #include static struct iovec*vs=NULL,*vc=NULL;/*服务器对客户端的处理*/voi原创 2015-01-22 22:42:48 · 493 阅读 · 0 评论 -
TCP服务端和客户端(2)
现在来解析服务端,let`s go!代码:#include #include #include #include #include #include #include #define PORT 8888 /*侦听端口地址*/#define BACKLOG 2 /*侦听队列长度*/int main(int argc, char *argv[]){原创 2015-01-11 21:10:52 · 420 阅读 · 0 评论 -
TCP服务端和客户端(3)
下面来解析客户端程序。代码:#include #include #include #include #include #include #include #define PORT 8888 /*侦听端口地址*/int main(int argc, char *argv[]){ int s; /*s为socket描述符*/ struct原创 2015-01-11 21:19:15 · 579 阅读 · 0 评论 -
TCP服务端和客户端(1)
在陈述这个小实例之前,首先将mafile写出来:makefile:all:client server #all规则,他依赖于client和server规则client:tcp_process.o tcp_client.o #client规则生成客户端程序 gcc -o client tcp_process.o tcp_client.o serv原创 2015-01-07 22:58:53 · 444 阅读 · 0 评论 -
crc原理总结
首先,很感谢http://wenku.baidu.com/view/fb791c0203d8ce2f006623f5.html作者的笔记。让我解除了对于crc的很多困惑。 接下来我想整理一下这方面的知识。1.算术上的除法:120÷9=13 余 3,120是被除数,9是除数,13是商,3是余数。念作120除以9,或者9除120,或者9去除120!(除法的过程就不写了) 这转载 2015-03-15 16:50:09 · 951 阅读 · 0 评论