xinetd网络(2) 协议头解析
1:在/etc/xinetd.d下添加配置文件xhttpd
service xhttpd
{
socket_type = stream //每行“=”前后各最多只能有一个空格
protocol= tcp
wait = no
user =nobody
server =/home/username/xhttpd/xhttpd //在xhttpd目录下有个xhttpd可执行文件
server_args = /home/username/dir //资源访问的目录
disable = no
flags = IPv4
}
2:添加监听端口
vim /etc/service
添加两行:
xhttpd 10086/tcp
xhttpd 10086/udp
3:重启xinetd服务
sudo service xinetd restart
4:在浏览器中输入访问地址:127.0.0.1:10086/hello.txt
- 然后xinetd会启动xhttpd程序,并且传入两个默认参数:
- argv[0] = xhttpd
- argv[1] = /home/username/dir
- 分析http头信息
- GET /hello.txt HTTP/1.1
5:xhttpd.c源码分析
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h> #define N 4096 void send_headers(char* type)
{
printf("HTTP/1.1 200 OK\r\n");
printf("Content-Type:%s; charset=utf-8\r\n",type);
printf("Connection:close\r\n");
printf("\r\n");
} void send_err()
{
//http protcol
//printf("HTTP/1.1 200 OK\r\n");
send_headers("text/html");
printf("<html>\r\n");
printf("<head><title>404 Can Not Find Page!</title></head>\r\n");
printf("<body>\r\n");
printf("Cann't Find Page!!!!\r\n");
printf("</body>\r\n");
printf("</html>\r\n");
exit();
} int main(int argc, char *argv[])
{
char line[N];
char method[N],path[N],protocol[N]; char *file;
struct stat sbuf;
FILE *fp;
int ich; // send_err();
// return 0; if(argc != )
{
send_err();
} if(chdir(argv[]) == -)
{
send_err();
} if(fgets(line,N,stdin) == NULL)
{
send_err();
} char headerInfo[];
strcpy(headerInfo,line); if(sscanf(line,"%[^ ] %[^ ] %[^ ]",method,path,protocol) != )
{
send_err(); //GET /hello.c HTTP/1.1
} while(fgets(line, N, stdin) != NULL)
if(strcmp(line,"\r\n"))
break; if(strcmp(method,"GET") != )
send_err(); if(path[] != '/')
send_err(); file = path+; if(stat(file,&sbuf) < )
send_err(); fp = fopen(file, "r");
if(fp == NULL)
send_err(); send_headers("text/plain");
//send_headers("audio/mpeg"); printf("method:%s\n",method);
printf("path:%s\n",path);
printf("protocol:%s\n",protocol);
printf("argv[0]:%s\n",argv[]);
printf("argv[1]:%s\n",argv[]);
printf("headerInfo:%s\n",headerInfo); while((ich = getc(fp)) != EOF)
putchar(ich); fflush(stdout);
fclose(fp);
return ;
}
xinetd网络(2) 协议头解析的更多相关文章
- [php]HTTP协议头解析
(Request-Line) GET /static/imgs/bqpd.jpg HTTP/1.1 Accept image/png, image/svg+xml, image/*;q=0.8, */ ...
- c++ 常见网络协议头
//NTP协议 typedef struct _NTP_HEADER { uint8_t _flags;//Flags 0xdb uint8_t _pcs;//Peer Clock Stratum u ...
- GJM : Unity3D 常用网络框架与实战解析 【笔记】
Unity常用网络框架与实战解析 1.Http协议 Http协议 存在TCP 之上 有时候 TLS\SSL 之上 默认端口80 https 默认端口 ...
- HTTP协议详细解析
HTTP协议详解 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准. HTTP是一个基 ...
- HTTP报文头解析
HTTP报文头解析 本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述.下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该 ...
- 基于byte[]的HTTP协议头分析代码
smark 专注于高并发网络和大型网站架规划设计,提供.NET平台下高吞吐的网络通讯应用技术咨询和支持 基于byte[]的HTTP协议头分析代码 最近需要为组件实现一个HTTP的扩展包,所以简单地实现 ...
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
C# 串口操作系列(4) -- 协议篇,文本协议数据解析 标签: c#uiobjectstringbyte 2010-06-09 01:50 19739人阅读 评论(26) 收藏 举报 分类: 通讯 ...
- Android网络请求与数据解析,使用Gson和GsonFormat解析复杂Json数据
版权声明:未经博主允许不得转载 一:简介 [达叔有道]软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and me, we are family ...
- xinetd网络
简单Web服务器 基本的HTTP协议 请求服务器数据 GET /文件或目录 HTTP/1.1 协议头部分(可选) /r/n(协议头结束) 服务器应答浏览器 HTTP/1.1 200 OK conten ...
随机推荐
- IBM MQ相关 ---- 系列文章
原 IBM websphere MQ远程队列的简单配置 转 MQ7.5以后的权限问题解决 原 MQ--API总结 转 连接IBM MQ原因码报2035的错误解决办法 原 Java连接MQ的实例 转 通 ...
- NET设计模式 第二部分 创建型模式(6):创建型模式专题总结(Creational Pattern)
创建型模式专题总结(Creational Pattern) ——.NET设计模式系列之七 Terrylee,2006年1月 概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统 ...
- hanlp在Python环境中的安装失败后的解决方法
Hanlp是由一系列模型与算法组成的javag工具包,目标是普及自然语言处理再生环境中的应用.有很多人在安装hanlp的时候会遇到安装失败的情况,下面就是某大神的分享的在python环境中安装失败的解 ...
- diff命令详解
Linux diff命令 Linux diff命令用于比较文件的差异. diff以逐行的方式,比较文本文件的异同处.如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录 用 ...
- Spark Hadoop Free 安装遇到的问题
运行 ./sbin/start-master.sh : SparkCommand:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -cp /home/se ...
- 阅读<Video Test Pattern Generator v7.0>笔记
阅读<Video Test Pattern Generator v7.0>笔记 1.数据宽度的问题 TotalDataWidth的计算公式: 疑问:为什么TotalDataWidth后面需 ...
- python 多线程 并发socket实例
sever side: import socketserver class MyTCPHandler(socketserver.BaseRequestHandler): def handle(self ...
- 虚拟机中安装centOS及破解nuke的方法
跟the foundry的工程师邮件交流,我的一个Nuke脚本在对方机器上执行有问题,确认对方是centOS之后我决定在自己机器上安装一个centOS来找一下问题所在.安装重点如下: 一: 一定要下载 ...
- PI接口无法使用.net4以上的解决方法:无法嵌入互操作类型“PISDKClass”。请改用适用的接口。
Interop type 'PISDKClass' cannot be embedded. Use the applicable interface instead. .net开发中,有时候在引用某些 ...
- 使用JavaScript完成文字向上间歇滚动
使用JavaScript完成文字的间歇滚动 const init = (initData) => { const area = initData.area; // 设置单行滚动的高度: cons ...