基本概念
定义
HTTP是OSI的应用层(7层)的一个response-request协议。一个HTTP服务器会监听某个指定端口来的client request,然后server根据Request做出反馈。默认端口80.
握手
另外HTTP建立连接有三次握手,分别是:客户端发起SYN, 服务器发起SYN+ACK, 客户端发起ACK。
HTTP断开连接有四次握手:客户端发起FIN,服务器发起ACK,服务器发起FIN, 客户端发起FIN。
返回状态码
2XX:good
3XX:重定向
4XX:客户端错误
5XX:服务器端错误
linux中常用命令
telnet
这是一个不安全的协议,但是可以用来测试连接有效性。
$ telnet www.opsschool.org 80
GET /en/latest/http_101.html HTTP/1.1
Host: www.opsschool.org
Trying 162.209.114.75...
Connected to ops-school.readthedocs.org.
cURL
cURL是一个使用URL语法 来传输数据的工具。比Telnet强大的点是:cURL可以创建HTTP Request(即可以指定GET, POST, HEAD等方法),
例如以下:
–request 指定方法为GET
-I 即只输出header
$ curl -I --request GET http://www.opsschool.org/en/latest/http_101.html
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 23 Jun 2015 20:42:25 GMT
Content-Type: text/html
Content-Length: 140673
Last-Modified: Wed, 27 May 2015 12:16:25 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: "5565b599-22581"
X-Served: Nginx
X-Subdomain-TryFiles: True
X-Deity: chimera-lts
Accept-Ranges: bytes
2. 对于大文件,可以使用-O 选项来显示进度
然后会显示以下的进度:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
4 467M 4 20.2M 0 0 116k 0 1:08:15 0:02:57 1:05:18 71532
3. 如果curl碰到重定向,而你想把这个重定向继续跟踪下去,使用-L 选项
$ curl -IL www.opsschool.org
HTTP/1.1 302 FOUND
Server: nginx/1.4.6 (Ubuntu)
......
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
.......
netcat
Netcat是一个可以建立HTTP连接,并且实现读写数据的工具。netcat可以作为服务器端或者客户端。
在很多地方,直接用nc
这个简称指代netcat。
做一个简单的client/server
可以通过-L
选项告诉netcat监听某个端口,造一个服务器端。
$ nc -l 192.168.0.1 1234 > output.log
以上命令告诉某台机器通过1234监听消息,听到的消息传递给output.log。注意IP地址改为该机器的IP地址。
2. 用客户端连接服务器,并且输入信息
$ echo "I'm connected as client" | nc 192.168.0.1 1234
3. 然后在服务器端可以看到输出:
$ cat output.log
I'm connected as client
可以做一个简单的聊天器
上面的命令如果不输出到文件,可以做及时聊天,只要:
服务器端
$ nc -l -p 1234
2. 客户端
$ nc 192.168.0.1 1234
然后就可以愉快的聊天了
作简单的HTTP服务器(比较危险,如果不懂网络安全,不要轻易尝试)
Netcat连接建立之后,可以执行命令或者脚本 。
netcat有一个traditional的版本,其中有DGAPING_SECURITY_HOLE
这个选项,可以使用-e <program/shell_script.sh>
来执行命令。
那么如何建立这个简单的HTTP服务器呢?
定义一个文件httpd.sh
然后在服务器端,通过这个命令来launch
$ while true; do netcat -lp 1234 -e ./httpd.sh; done
然后服务器端就已经在1234端口监听了。
3. 在客户端通过不同的HTTP命令连接,可以看到反馈
$ curl 192.168.0.1:1234/
<html>Hello there world!</html>
$ nc 192.168.0.1 1234
GET /notexisting.html HTTP/1.1
最后注意:一定要在服务器端把服务关闭
以上文章来源:opsschool