基本概念
定义
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
-
对于大文件,可以使用-O选项来显示进度
然后会显示以下的进度:
(img) -
如果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地址。 -
用客户端连接服务器,并且输入信息
''$ echo "I'm connected as client" | nc 192.168.0.1 1234
然后在服务器端可以看到输出:
''$ cat output.log
'' I'm connected as client
可以做一个简单的聊天器
上面的命令如果不输出到文件,可以做及时聊天,只要:
- 服务器端
'' $ nc -l -p 1234 - 客户端
'' $ 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端口监听了。 -
在客户端通过不同的HTTP命令连接,可以看到反馈
''$ curl 192.168.0.1:1234/
'' <html>Hello there world!</html>
''
'' $ nc 192.168.0.1 1234
'' GET /notexisting.html HTTP/1.1
最后注意:一定要在服务器端把服务关闭
网友评论