tinyhttpd源码解析,最简单的HTTP服务器

简介

tinyhttpd 是一个不到 500 行的超轻量型 Http Server,全部用ANSI C编写,用来学习非常不错,可以帮助我们真正理解服务器程序的本质。
看完所有源码,真的感觉有很大收获,无论是 unix 的编程,还是 GET/POST 的 Web 处理流程,都清晰了不少。废话不说,开始我们的 Server 探索之旅。

主要函数

所有函数的声明

1
2
3
4
5
6
7
8
9
10
11
12
void accept_request(int);  
void bad_request(int);
void cat(int, FILE *);
void cannot_execute(int);
void error_die(const char *);
void execute_cgi(int, const char *, const char *, const char *);
int get_line(int, char *, int);
void headers(int, const char *);
void not_found(int);
void serve_file(int, const char *);
int startup(u_short *);
void unimplemented(int);

C语言发送http请求

C语言发送http请求和普通的socket通讯,原理是一样的.无非就三步connect()连上服务器,send()发送数据,recv()接收数据.只不过发送的数据有特定的格式.下面的是简单发送一个http请求的例子

DNS介绍

简介

域名系统(Domain Name System)是一种分层的分布式命名系统,用于连接到互联网或互联网上的计算机、服务或其他资源。它将更容易记忆的域名转换为使用底层网络协议定位和识别计算机服务和设备所需的数字IP地址.

域名服务器发展历史

DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。
域名系统的发展要从ARPAnet网络的发展说起,DNS就是为了解决ARPAnet的一些问题而开发的。ARPAnet是美国国防部在20世纪60年代建立的一个试验性计算机网络,

tcpdump抓包

tcpdump是Linux下的抓包工具,通过tcpdump可以帮助我们分析网络,排除故障,安全测试等。了解tcpdump是一个系统管理员,网络工程师必不可少的专业技能。

基础知识

基本命令解析

1
sudo tcpdump -i eth0 -nn -v port 80

-i : 选择要抓包的接口,通常是以太网卡或者无线适配器,但也可能是vlan或者更稀奇古怪的东西。

-nn : -n显示主机名,-nn显示主机名和端口。

-v : 显示详细信息,-vv显示更多。

port 80 : 只抓80端口的数据包,当然通常是HTTP包。