1、Curl 簡介php
curl命令是一個利用URL規則在命令行下工做的文件傳輸工具。它支持文件的上傳和下載,因此是html
綜合傳輸工具,但按傳統,習慣稱curl爲下載工具。做爲一款強力工具,curl支持包括HTTP、程序員
HTTPS、ftp等衆多協議,還支持POST、cookies、認證、從指定偏移處下載部分文件、用戶代理字web
符串、限速、文件大小、進度條等特徵。作網頁處理流程和數據檢索自動化,curl能夠祝一臂之力。瀏覽器
2、經常使用的選項安全
-I/--head服務器
//只顯示返回的 HTTP 頭部信息cookie
-i/--includecurl
//返回網頁 HTTP 代碼的同時也包含 HTTP 頭部信息輸出xss
-A/--user-agent <agent string>
//User-Agent簡單來講就是客戶使用的操做系統和瀏覽器信息
-e/--referer <URL>
//Referer,就是客戶是從哪一個頁面來到當前頁面的
-H/--header <header>
//一般使用 -H host:www.***.com 來自定義HTTP請求頭部要訪問此服務器上的 www.***.com 這個
主機
--interface <name>
//當你的服務器上有多個 IP 或網卡時,可使用 --interface 來指定使用哪一個接口、IP 地址或者主機
名發送 curl 請求
curl --interface eth0:1 http://www.***.com/
curl --interface 172.16.100.1 http://www.***.com/
-k/--insecure
//https方式鏈接的站點在創建會話時默認是會檢測CA與網站的證書之間的完整性和可靠性,檢查經過後會使用經過證書來
加密傳輸數據,而http方式是直接明文傳輸數據的,因此https是安全的,http是不安全的。在直接curl https鏈接的站點
時是不會獲取到網頁HTTP代碼的。
翻譯:(SSL)此選項明確容許cURL執行「不安全」的SSL鏈接和傳輸。全部的SSL鏈接嘗試採用捆綁默認安裝的
CA證書的安全。這使得全部的鏈接被認爲是「不安全的」失敗,除非使用-k / --insecure 。
-L/--location
//(HTTP / HTTPS)若是服務器報告所請求的網頁已經轉移到一個不一樣的位置(標有位置:標題和3xx響應代碼),此選項
將使curl從新請求新的地方
3、實例
爲了節省篇幅,省略了返回的HTTP網頁代碼,僅以狀態碼來區分請求是否成功,如200爲成功,301永久跳轉,302臨時跳轉
1. 有的程序員會禁止爬蟲或者其它工具對網站進行惡意爬行,因此簡單識別用戶使用的瀏覽器和操
做系統標識,這時候使用curl就獲取不到網頁的HTTP代碼了,但咱們能夠指定User-Agent方式來繞
過,以下:
[root@XssCookies xss]# curl -I -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" -k https://iyuns.cc
HTTP/1.1 200 OK
Server: ***
Date: Mon, 13 Feb 2017 17:43:47 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.0.12
其中也用到了-k/--insecure,具體描述看上面的選項解釋
[root@XssCookies xss]# curl -I -k https://iyuns.cc
HTTP/1.1 200 OK
Server: ***
Date: Mon, 13 Feb 2017 17:43:23 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.0.12
2. 跟隨網頁跳轉
咱們默認直接curl的時候返回的HTTP頭部是這樣子的:
[root@XssCookies xss]# curl -I http://www.***.com/
HTTP/1.1 302 Moved Temporarily
Date: Mon, 13 Feb 2017 17:44:46 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
X-Powered-By: PHP/5.6.15
Location: ./web/index.php?
Server: ***
其中客戶的站點設置了直接訪問主域名時,自動跳轉到http://www.***.com/web/index.php?這個
頁面,但curl自己默認不會自動跳轉而後返回HTTP請求頭和網頁代碼。咱們可使用-L/--location
或者指定咱們是從哪一個頁面跳轉過來的,就能夠返回跳轉後的頁面網頁代碼。
[root@XssCookies ~]# curl -I -L http://www.***.com/
HTTP/1.1 302 Moved Temporarily
Date: Mon, 13 Feb 2017 18:56:25 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
X-Powered-By: PHP/5.6.15
Location: ./web/index.php?
Server: ***
HTTP/1.1 200 OK
Date: Mon, 13 Feb 2017 18:56:25 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.15
Server: ***
其中返回的第一個HTTP頭部信息是未跳轉前的主域名請求頭,第二個是跳轉後的頁面返回的請求
頭,200狀態碼就表示成功了,也可使用-i來顯示完整的網頁代碼
或者指定referer來表明咱們是從主域名跳轉到的http://www.***.com/web/index.php?這個頁面:
[root@XssCookies ~]# curl -I http://www.***.com/web/index.php? -e "www.***.com"
HTTP/1.1 200 OK
Date: Mon, 13 Feb 2017 19:31:13 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.15
Server: ***
3. 若是一個站有多個A記錄提供服務時(多是CDN),能夠直接指定源IP地址(各類途徑找)或者CDN節點的地址來獲取http頁面代碼
[root@XssCookies xss]# curl -I http://*.*.*.*/web/index.php? -e "www.***.com" -H host:www.***.com
HTTP/1.1 200 OK
Server: ***
Date: Mon, 13 Feb 2017 17:46:11 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.15
*.*.*.* 表示你找到的真實IP地址或者其餘地址(反正只要能提供服務的)