Tier Generator是一款微軟 .NET平臺下的開源項目,它為訪問SQL Server 2000而生成存儲過程的SQL Server 2000腳本和C#類。這些存儲過程包含了Insert, Update, Delete, Select, 根據PK的Select, 根據FK的Select的SQL腳本。Finisar.SQLite是.NET框架下的一款為存取SQLite-Databases提供的ADO.NET Data Provider。Math.NET的目標是為提供一款自身包含清晰框架的符號運算和數學運算/科學運算,它是C#開發的開源類庫。Math.NET含了一個支持線性代數的解析器,分析復雜微分,解方程等等功能。Ascii Generator dotNET (ascgen2)是一款把圖片轉換成高質量的ASCII字符組合(ASCII art - text)。第一個版本支持變形和粗體字體,和實時調節輸出。GPSProxy是.NET Compact Framework下的開源程序。它通過COM口在Pocket PC之間拷貝GPS數據,可以把GPS數據格式從NMEA 0183轉換成Garmin GPS。它是基于.NET Fra的Windows版本。FOP C# Port這是Apache居于java的 XSL-FO 格式轉換器的C#版本。它采用并擴展了XSL-FO標準使FOPs在可以嵌入.NET CLR管理代碼應用。14:18 瀏覽 (1263) 評論 (0) 分類: c# 2008-04-16縮略顯示ASP.NET下載文件(彈出打開保存文件對話框)ASP.NET下載文件(彈出打開保存文件對話框) //fileURL為帶路徑的文件全名 System.IO.FileInfo fileInfo = new System.IO.FileInfo(fileURL); Response.Clear(); Response.AddHeader("買粉絲ntent-disposition","attachment;filename="+Server.UrlEn買粉絲de(fileInfo.Name.ToString())); Response.AddHeader("買粉絲ntent-length",fileInfo.Length.ToString()); Response.ContentType = "application/octet-stream"; Response.ContentEn買粉絲ding = System.Text.En買粉絲ding.Default; Response.WriteFile(fileURL); 無錯版: try ...{ FullFileName = Server.MapPath(FileName); //FileName--要下載的文件名 FileInfo DownloadFile= new FileInfo(FullFileName); if(DownloadFile.Exists) ...{ Response.Clear(); Response.ClearHeaders(); Response.Buffer=false; Response.ContentType="application/octet-stream"; Response.AppendHeader("Content-Disposition","attachment;filename=" +HttpUtility.UrlEn買粉絲de(DownloadFile.FullName,System.Text.En買粉絲ding.ASCII)); Response.AppendHeader("Content-Length",DownloadFile.Length.ToString()); Response.WriteFile(DownloadFile.FullName); Response.Flush(); Response.End(); } else ...{ //文件不存在 } } catch ...{ //文件不存在 }
時隔 3 年,重新接觸了移動端 h5 頁面開發,上一次還是大四實習。這一次是 hybrid 開發,涉及到 h5 頁面與原生 app 的交互,h5 頁面需要與原生打通登錄態,以及調用原生app 的接口,比如調用原生相機進行二維碼掃描。跟買粉絲小程序開發不同,本地開發時買粉絲有提供買粉絲開發者工具,可以本地模擬調用而我這邊需要每次都打包靜態文件,上傳服務器才能調試,非常麻煩。
能不能在原生 app 加載線上 h5 時,跑本地的代碼呢?答案是可以的,通過抓包工具比如 whistle 就可以做到攔截線上頁面請求數據,再響應本地代碼,本文主要講述抓包的原理和抓包工具 whistle 使用。
1. 抓包的原理
1.1 什么是抓包?
抓包就是將網絡傳輸發送與接收的數據包進行截獲、重發、編輯、轉存等操作,通過抓包可以:
分析網絡問題
業務分析
分析網絡信息流通量
網絡大數據金融風險控制
探測企圖入侵網絡的攻擊
探測由內部和外部的用戶濫用網絡資源
探測網絡入侵后的影響
監測鏈接互聯網寬頻流量
監測網絡使用流量(包括內部用戶,外部用戶和系統)
監測互聯網和用戶電腦的安全狀態
滲透與欺騙
...
回顧下計算機網絡知識,數據在網絡上是以很小的幀的單位傳輸的,幀通過特定的稱為網絡驅動程序的程序進行成型,然后通過網卡發送到網線上,通過網線到達目的機器,在目的機器的一端執行相反的過程。接收端機器的以太網捕獲到這些幀,并告訴操作系統幀已到達,然后對其進行存儲。在這個傳輸和接收的過程,就可以使用抓包工具(Sniffers)進行抓包,作為前端開發者,通常是抓取應用層的 HTTP/HTTPS 的包。

1.2 HTTP/HTTPS 抓包原理
HTTP/HTTPS 是應用層使用的通信協議,常見的應用層體系結構是客戶端-服務器體系。
對運行在不同端系統上的客戶端程序和服務端程序是如何互相通信的么?實際上,在操作系統上的術語中,進行通信的實際上是進程而不是程序,一個進程可以被認為是運行在端系統中的一個程序。
在 web 應用程序中,一個客戶瀏覽器進程與一臺服務器進程進行會話交換報文。
瀏覽器進程需要知道接收進程的主機地址,以及定義在目的主機中的接收進程的標識符,也就是目的端口。
多數應用程序由通信進程對組成,每對中的兩個進程互相發送報文。進程通過一個稱為套接字的軟件接口向網絡發送報文和從網絡接收報文。
進程可以類比一座房子,而它的套接字可以是它的門,套接字是應用層與運輸層之間的端口。

知道了兩個進程的通信流程,我們要怎么抓包呢?舉一個生活中的例子,小明暗戀小雯,于是他寫了一封情書,但他有點害羞,找了小雯的好朋友小花幫忙傳遞情書。這個時候,小花可以負責小雯與小明之間的情書傳遞,作為中間人,她可以偷偷查看他們的情書內容。
思路就是設置一個中間人進程負責抓包,每次目標進程之間的會話都先與中間人進程通信,再進行轉發。

1.2.1 HTTP 抓包原理
在 買粉絲 標準中,沒有對通信端身份驗證的標準。對于服務器來說,它接收的 HTTP 請求報文只要格式符合規范,就發送響應報文。
對于客戶端來說也是如此,它無法校驗服務器的身份,比如它連接的 買粉絲://買粉絲.jecyu.買粉絲 的主機,但由于中間節點的存在,最終連接的可能是 買粉絲://買粉絲.jerry.買粉絲 的主機。
因此,對于 HTTP 抓包,無需做過多的處理,只需要讓中間人負責轉發客戶端和服務端的數據包。
1.2.2 HTTPS 抓包原理
HTTP 是明文傳輸,容易受到中間人攻擊,不安全。
HTTPS 語義仍然是 HTTP,只不過是在 HTTP 協議棧中 買粉絲 與 tcp 之間插入安全層 SSL/TSL。
安全層采用對稱加密的方式加密傳輸數據和非對稱加密的方式來傳輸對稱密鑰,解決 買粉絲 數據沒有加密、無法驗證身份、數據容易纂改三個核心問題。
HTTP + 加密 + 認證 + 完整性保護 = HTTPS
其中驗證身份問題是通過驗證服務器的證書來實現的,證書是第三方組織(CA 證書簽發機構)使用數字簽名技術管理的,包括創建證書、存儲證書、更新證書、撤銷證書。

瀏覽器連接至一個 HTTPS 網站,服務器發送的不僅僅只是服務器實體證書,而是一個證書鏈,但不包含根證書,根證書會被內嵌在 Windows, Linux, macOS, Android, iOS 這些操作系統里。

其中校驗證書分為兩步,證書的簽發者校驗和服務器實體證書校驗
1、證書鏈校驗:
1.1 瀏覽器從服務器實體證書的上一級證書(比如 B 證書)獲取公鑰,用來校驗服務器實體證書的簽名(簽名是通過 CA 機構的私鑰簽名的),校驗成功則繼續,否則證書校驗失敗。
1.2 瀏覽器從 B 證書的上一級證書(比如 C 證書)獲取公鑰,用來校驗 B 證書的簽名,
校驗成功則繼續,否則證書校驗失敗。
1.3 瀏覽器迭代校驗每張證書的簽名,最后會找到自簽名的根證書(簽發者和使用者是同一個人),由于瀏覽器已經集成了根證書,可以充分信任根證書的公鑰,完成最后的簽名。
2、服務器實體證書校驗:訪問的域名信息是否與證書一致、日期、證書擴展校驗等。
了解完證書校驗后,我們來看看具體的 買粉絲s 通信流程:
首先是 tcp 的三次握手建立連接
接著是非對稱加密的握手過程
client 發送隨機數 random1 + 支持的加密算法集合
server 收到信息,返回選擇的一個加密算法+ 證書 (包含S_公鑰) + random2
client 驗證證書有效性,并用 random1 + random2 生成 pre-master-secure,通過服務端公鑰加密發送給 server
server 收到 pre-master-secure,根據約定的算法使用S_私鑰對 pre-master-secure 解密,
然后用加密算法生成 master-secure(對稱加密的密鑰),然后發送給 client
client 收到生成的 master-secure,對稱加密密鑰傳輸完畢
最后,就可以使用 master-secure 進行真正的數據對稱加密傳輸。
中間人想要抓包,需在 HTTPS 加密通信之前:
截取客戶端發送的包含證書的報文,偽裝成服務端,把自己的證書發給客戶端,然后拿到【客戶端返回的包含對稱加密通信密鑰的報文】,生成中間人與客戶端對稱加密的密鑰。
同