代理軟體源碼
1、首先打開虎牙,點擊輸入賬號密碼。
2、其次在平台中輸入直播房間php代理源碼。
3、最後在伺服器中點擊使用即可完成。
㈡ 怎麼才能得到一個軟體的源代碼
你好歷答陸。
軟體源代碼一般來說就是軟體公司產品發布時間一定期限後,舉鍵自己公布出來的。當然。使用反編譯也是可以的。不過破解工作很復雜,足夠再開發肢頃新軟體了。得不償失。㈢ 國外軟體公司為什麼源代碼授權
國外軟體公司源代碼授權為了在履行開發協議的過程中更好地保護客戶的利益。國外的軟體開發協議中開始出現軟體源代碼在開發過程中部分向客戶交付的條款,也有的是通過第三方的源代碼保管機構,中國現在尚未發現有提供類似服務的機構,理論上來講,軟體開發中會產生大量的迭代版本,開發中間向客戶交付的部分代碼並無實質意義,但是對於開發末期已經進入調試階段的軟體代碼來講,盡管與最終代碼仍有不同,但是其價值已經可以保護和持有代碼的當事人一方。這也是將軟體代碼的部分交付進入軟體開發合同的原因之一。
㈣ OkHttp源碼解析 (三)——代理和路由
初看OkHttp源碼,由於對Address、Route、Proxy、ProxySelector、RouteSelector等理解不夠,讀源碼非常吃力,看了幾遍依然對於尋找復用連接、創建連接、連接伺服器、連接代理伺服器、創建隧道連接等邏輯似懂非懂,本篇決定梳理一遍相關的概念及基本原理。
● HTTP/1.1(HTTPS)
● HTTP/2
● SPDY
一個http請求的流程(直連):
1、輸入url及參數;
2、如果是url是域名則解析ip地址,可能對應多個ip,如果沒有指定埠,則用默認埠,http請求用80;
3、創建socket,根據ip和埠連接伺服器(socket內部會完成3次TCP握手);
4、socket成功連接後,發送http報文數據。
一個https請求的流程(直連):
1、輸入url及參數;
2、如果是url是域名則解析ip地址,可能對應多個ip,如果沒有指定埠,則用默認埠,https請求用443;
3、創建socket,根據ip和埠連接伺服器(socket內部會完成3次TCP握手);
4、socket成功連接後進行TLS握手,可通過java標准款提供的SSLSocket完成;
5、握手成功後,發送https報文數據。
1、分類
● HTTP代理:普通代理、隧道代理
● SOCKS代理:SOCKS4、SOCKS5
2、HTTP代理分類及說明
普通代理
HTTP/1.1 協議的第一部分。其代理過程為:
● client 請求 proxy
● proxy 解析請求獲取 origin server 地址
● proxy 向 origin server 轉發請求
● proxy 接收 origin server 的響應
● proxy 向 client 轉發響應
其中proxy獲取目的伺服器地址的標准方法是解析 request line 里的 request-URL。因為proxy需要解析報文,因此普通代理無法適用於https,因為報文都是加密的。
隧道代理
通過 Web 代理伺服器用隧道方式傳輸基於 TCP 的協議。
請求包括兩個階段,一是連接(隧道)建立階段,二是數據通信(請求響應)階段,數據通信是基於 TCP packet ,代理伺服器不會對請求及響應的報文作任何的處理,都是原封不動的轉發,因此可以代理 HTTPS請求和響應。
代理過程為:
● client 向 proxy 發送 CONNET 請求(包含了 origin server 的地址)
● proxy 與 origin server 建立 TCP 連接
● proxy 向 client 發送響應
● client 向 proxy 發送請求,proxy 原封不動向 origin server 轉發請求,請求數據不做任何封裝,為原生 TCP packet.
3、SOCKS代理分類及說明
● SOCKS4:只支持TCP協議(即傳輸控制協議)
● SOCKS5: 既支持TCP協議又支持UDP協議(即用戶數據包協議),還支持各種身份驗證機制、伺服器端域名解析等。
SOCK4能做到的SOCKS5都可得到,但反過來卻不行,比如我們常用的聊天工具QQ在使用代理時就要求用SOCKS5代理,因為它需要使用UDP協議來傳輸數據。
有了上面的基礎知識,下面分析結合源碼分析OkHttp路由相關的邏輯。OkHttp用Address來描述與目標伺服器建立連接的配置信息,但請求輸入的可能是域名,一個域名可能對於多個ip,真正建立連接是其中一個ip,另外,如果設置了代理,客戶端是與代理伺服器建立直接連接,而不是目標伺服器,代理又可能是域名,可能對應多個ip。因此,這里用Route來描述最終選擇的路由,即客戶端與哪個ip建立連接,是代理還是直連。下面對比下Address及Route的屬性,及路由選擇器RouteSelector。
描述與目標伺服器建立連接所需要的配置信息,包括目標主機名、埠、dns,SocketFactory,如果是https請求,包括TLS相關的SSLSocketFactory 、HostnameVerifier 、CertificatePinner,代理伺服器信息Proxy 、ProxySelector 。
Route提供了真正連接伺服器所需要的動態信息,明確需要連接的伺服器IP地址及代理伺服器,一個Address可能會有很多個路由Route供選擇(一個DNS對應對個IP)。
Address和Route都是數據對象,沒有提供操作方法,OkHttp另外定義了RouteSelector來完成選擇的路由的操作。
1、讀取代理配置信息:resetNextProxy()
讀取代理配置:
● 如果有指定代理(不讀取系統配置,在OkHttpClient實例中指定),則只用1個該指定代理;
● 如果沒有指定,則讀取系統配置的,可能有多個。
2、獲取需要嘗試的socket地址(目標伺服器或者代理伺服器):resetNextInetSocketAddress()
結合Address的host和代理,解析要嘗試的套接字地址(ip+埠)列表:
● 直連或者SOCK代理, 則用目標伺服器的主機名和埠,如果是HTTP代理,則用代理伺服器的主機名和埠;
● 如果是SOCK代理,根據目標伺服器主機名和埠號創建未解析的套接字地址,列表只有1個地址;
● 如果是直連或HTTP代理,先DNS解析,得到InetAddress列表(沒有埠),再創建InetSocketAddress列表(帶上埠),InetSocketAddress與InetAddress的區別是前者帶埠信息。
3、獲取路由列表:next()
選擇路由的流程解析:
● 遍歷每個代理對象,可能多個,直連的代理對象為Proxy.DIRECT(實際是沒有中間代理的);
● 對每個代理獲取套接字地址列表;
● 遍歷地址列表,創建Route,判斷Route如果在路由黑名單中,則添加到失敗路由列表,不在黑名單中則添加到待返回的Route列表;
● 如果最後待返回的Route列表為空,即可能所有路由都在黑名單中,實在沒有新路由了,則將失敗的路由集合返回;
● 傳入Route列表創建Selection對象,對象比較簡單,就是一個目標路由集合,及讀取方法。
為了避免不必要的嘗試,OkHttp會把連接失敗的路由加入到黑名單中,由RouteDatabase管理,該類比較簡單,就是一個失敗路由集合。
1、創建Address
Address的創建在RetryAndFollowUpInteceptor里,每次請求會聲明一個新的Address及StreamAllocation對象,而StreamAllocation使用Address創建RouteSelector對象,在連接時RouteSelector確定請求的路由。
每個Requst都會構造一個Address對象,構造好了Address對象只是有了與伺服器連接的配置信息,但沒有確定最終伺服器的ip,也沒有確定連接的路由。
2、創建RouteSelector
在StreamAllocation聲明的同時會聲明路由選擇器RouteSelector,為一次請求尋找路由。
3、選擇可用的路由Route
下面在測試過程跟蹤實例對象來理解,分別測試直連和HTTP代理HTTP2請求路由的選擇過程:
● 直連請求流程
● HTTP代理HTTPS流程
請求url: https://www.jianshu.com/p/63ba15d8877a
1、構造address對象
2、讀取代理配置:resetNextProxy
3、解析目標伺服器套接字地址:resetNextInetSocketAddress
4、選擇Route創建RealConnection
5、確定協議
測試方法:
● 在PC端打開Charles,設置埠,如何設置代理,網上有教程,比較簡單;
● 手機打開WIFI,選擇連接的WIFI修改網路,在高級選項中設置中指定了代理伺服器,ip為PC的ip,埠是Charles剛設置的埠;
● OkHttpClient不指定代理,發起請求。
1、構造address對象
2、讀取代理配置:resetNextProxy
3、解析目標伺服器套接字地址:resetNextInetSocketAddress
4、選擇Route創建RealConnection
5、創建隧道
由於是代理https請求,需要用到隧道代理。
從圖可以看出,建立隧道其實是發送CONNECT請求,header包括欄位Proxy-Connection,目標主機名,請求內容類似:
6、確定協議,SSL握手
1、代理可分為HTTP代理和SOCK代理;
2、HTTP代理又分為普通代理和隧道代理;普通代理適合明文傳輸,即http請求;隧道代理僅轉發TCP包,適合加密傳輸,即https/http2;
3、SOCK代理又分為SOCK4和SOCK5,區別是後者支持UDP傳輸,適合代理聊天工具如QQ;
4、沒有設置代理(OkHttpClient沒有指定同時系統也沒有設置),客戶端直接與目標伺服器建立TCP連接;
5、設置了代理,代理http請求時,客戶端與代理伺服器建立TCP連接,如果代理伺服器是域名,則解釋代理伺服器域名,而目標伺服器的域名由代理伺服器解析;
6、設置了代理,代理https/http2請求時,客戶端與代理伺服器建立TCP連接,發送CONNECT請求與代理伺服器建立隧道,並進行SSL握手,代理伺服器不解析數據,僅轉發TCP數據包。
如何正確使用 HTTP proxy
OkHttp3中的代理與路由
HTTP 代理原理及實現(一)
㈤ 結構型模式-安卓源碼實戰之的Proxy(代理)、Delegate(委託)
Proxy和Delegate的設計思想是相同的,可以一起討論。前面是代理模式的簡要介紹,後面是具體源碼實戰。
以下基礎知識摘抄自《設計模式-可復用面向對象軟體的基礎》Proxy章節
為其他對象提供一種代理以控制對這個對象的訪問
當創建某一具體對象RealSubject開銷很大時,應該根據需要進行創建,當真正需要到這個RealSubject對象時在進行創建,此時就需要用到代理Proxy 。
例如需要在文檔中嵌入 圖形對象的文檔編輯器功能 ,然而 創建圖形文檔編輯器的開銷很大也不是每一個文檔都需要用到圖形文檔編輯器 。所以我們使用另外一個對象(即圖像Proxy) 代替 真正的圖形文檔編輯器。 Proxy可以代替一個圖形文檔編輯器,並且在真正需要的時候負責實例化這個圖形文檔編輯器對象。
只有當文檔編輯器點擊 圖形文檔編輯器 代理Proxy的圖標以啟動功能時,圖形代理Proxy才創建真正的 圖形文檔編輯器 對象
上面說過,代理(委託)模式是為了避免直接創建開銷大的資源而不使用,採用的一種代理模式以便於真正使用時在實例化。
在 PhoneWindowManager 中使用 KeyguardServiceDelegate 來代理 KeyguardService 的功能( KeyguardService 由 KeyguardServiceWrapper 包裝器進行包裝)
PhoneWindowManager 需要使用到 KeyguardService 的功能,但是在創建 PhoneWindowManager 時就實例化 KeyguardService 沒必要且開銷大,因為還沒用到 KeyguardService 的功能。直接創建 KeyguardService 會浪費 binder線程池 資源,所以應該在需要使用的時候再創建,所以引入 KeyguardServiceDelegate 。
PhoneWindowManager 並沒有直接創建 KeyguardService 對象,而是創建了代理對象 KeyguardServiceDelegate 。 後面 PhoneWindowManager 需要使用到 KeyguardService 的功能時,通過調用 KeyguardServiceDelegate.bindService 將 KeyguardService 的 binder 對象轉化為 介面 封裝到 KeyguardServiceWrapper 包裝器,最後將 KeyguardServiceWrapper 賦值到 KeyguardServiceDelegate 的成員變數,完成整個代理模式的架構。
最終的方法調用流程:
PhoneWindowManager -> KeyguardServiceDelegate ->KeyguardServiceWrapper->KeyguardService
通過創建KeyguardServiceDelegate來避免直接創建KeyguardService而不使用帶來不必要的開銷。屬於延遲載入。
[SystemServer.java]
眾所周知SystemServer用來完成服務的創建和初始化過程。
一:WindowManagerService.main();啟動了WMS,可以看到new PhoneWindowManager()傳入WMS的main方法中,它將被賦值到成員變數WindowManagerPolicy mPolicy;
二:wm.onInitReady();調用WMS的init方法,這里是KeyguardServiceDelegate的創建流程
[WindowManagerService.java]
[WindowManagerService.java]
調用PhoneWindowManager.init方法
[PhoneWindowManager.java]
這里可以看到,在PhoneWindowManager.init函數中並沒有直接創建KeyguardService對象,而是創建了代理對象KeyguardServiceDelegate。在後面需要使用到KeyguardService的功能時,通過調用KeyguardServiceDelegate.bindService將KeyguardService的binder對象轉化為介面封裝到KeyguardServiceWrapper包裝器,最後將包裝器賦值給KeyguardServiceDelegate的成員變數
[KeyguardServiceDelegate.java]
[SystemServer.java]
[SystemServer.java]
[WindowManagerService.java]
mPolicy指的是WindowManagerPolicy。而PhoneWindowManager實現了WindowManagerPolicy介面。mPolicy的賦值在WMS的構造函數中就已經完成了。而WMS的啟動在systemServer中。
[PhoneWindowManager.java]
[PhoneWindowManager.java]
[PhoneWindowManager.java]
調用context.bindServiceAsUser(...)來綁定服務,重點關注以下幾點
通過指定ComponentName來綁定服務。可以看到KeyguardServiceDelegate所在包名為
/frameworks/base/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
尋找resources.getString(com.android.internal.R.string.config_keyguardComponent)的定義位置
[/frameworks/base/core/res/res/values/config.xml]
可以看到config_keyguardComponent對應啟動的就是 KeyguardService 這個服務。通過 ServiceConnection 去指定拿到 KeyguardService 後,將 KeyguardService 轉換為介面對象 IKeyguardService.Stub.asInterface(service) 來創建 KeyguardServiceWrapper 對象。看一看 KeyguardServiceWrapper 的創建過程
[KeyguardServiceWrapper.java]
可以看到將IKeyguardService service傳遞給了成員變數mService
ServiceConnection mKeyguardConnection 里通過 KeyguardService 的創建了代理對象 KeyguardServiceWrapper 。
後續當需要使用到 KeyguardService 功能是將是以下的調用過程
PhoneWindowManager -> KeyguardServiceDelegate ->KeyguardServiceWrapper->KeyguardService
㈥ 怎樣查看一個軟體的源代碼
對於現在的軟體來說,源代碼是最基礎的部分,得到了源代碼也就幾乎得到了軟體的全部。源代碼對於商業性質的軟體來說是極其重要的,一旦泄露就會造成非常大的損失,所以源代碼是一個軟體開發團隊的最高機密。
正因如此,很多人出於不同目的,會想辦法得到軟體的源代碼,但是我們知道,軟體的最終產品一般是已經編譯過的文件,就像我們初學C語言時生成的 exe 文件一樣,是一些二進制符,不能直接查看源碼。
想要查看一個軟體的源代碼,首先要確定這個軟體的開發者是否已經將其開源,如果開源的話就不必大費周章地去反編譯了,直接去開源社區里就會發現該軟體的源碼,開發者一般也會提供源碼的下載鏈接。
如果軟體不開源,那就要進行反編譯了,查看大多數軟體的源碼都需要用到這個方法,即使反編譯了,看到的源代碼也是非常混亂的,因為為了保護源碼,開發者在編譯前都會進行混淆,目的就是即使有人反編譯成功,也無法看懂代碼里的邏輯,這也是保護源碼的最後一道防線。
㈦ 從那裡可以找到並下載開源軟體的源代碼越詳細越好。謝謝了
從那裡可以找到並下載開源軟體的源代碼?越詳細越好。謝謝了
google code和soure fe是兩個最大的開源軟體平台,許多開源項目都架在上面。
我玩了一段時間的ubuntu,常常在上面下載軟體。有一些是跨平台的,有一些則只能在linux下編譯。
源碼包的文件擴展名一般為.tar.gz或者 .tar.bz2,linux下常用的兩個打包壓縮格式,winrar也可以解壓它。
請問哪裡可以下載到開源軟體源代碼?
那個啊`~~
你去下載linux裡面很多啊~
7z,fla不是開源軟體嗎?那麼,在哪裡可以找到 源代碼?
which 7z|xargs dpkg -S|cut -d ":" -f 1|xargs apt-get source
如果樓主使用的是ubuntu,debian等系統,可以試試上面的命令,已經在我的ubuntu10.10下測試通過
或者在soure fe下載
:sourcefe./projects/sevenzip/files/7-Zip/9.20/7z920.tar.bz2/download
許多的開源項目都架在sourge fe和google code上,源碼包一般擴展名tar.bz2 ,tar.gz ,tgz等都是linux下常見的打包壓縮格式,7z為跨平台軟體,在windows,linux下都可以編譯。
怎麼從開源中國下載某開源軟體的源代碼
打開開源中國網站;
注冊、登錄;
在網站內查找關鍵詞;
再所需要的網頁下載。
其實國外也有很多類似的網站,可以搜搜。
求開源軟體ImgBurn的源代碼
:code.google./p/opensofare/downloads/detail?name=imgburn.exe&can=2&q=
在右邊欄選擇Source
官方網址::imgburn.
網站上說此軟體為免費軟體不是開源軟體。
請問哪可以下到開源軟體 Sumatra PDF的源代碼?
sf.應該有吧
何為開源軟體 開源代碼
開源的源字就是只代碼的。
開源是為了軟體共享,讓更多的人參與軟體的完善中去。當然,具體的開源宗旨的話你可以看各個開源協議的目標和宗旨。
什麼是源代碼,開源軟體
源代碼就是作者書寫的程序代碼,通常是有意義的,人能看懂匯編及高級語言代碼。
這些源代碼經過編譯器編譯鏈接後會變成由計算機能夠看懂的二進制可執行代碼,這些代碼通常人是看不懂的,當然有些也可以通過反匯編等手段一定程度上「看懂」
所謂的開源軟體,就是作者將源代碼與編譯後的可執行代碼同時發布。
一般的軟體,作者只是發布編譯後的可執行代碼,而不發布源代碼。
開源軟體怎麼看源代碼
要看作者有沒有發布此程序的源碼出來.
如果確認是開源軟體, 去作者主頁下載即可.
hadoop 源代碼 從哪裡可以找到啊?怎麼下載,說詳細一點謝謝
你可以用SVN軟體在這里同步到最新的代碼:
:svn.apache./repos/asf/hadoop
其實你同步你研究領域的分支就可以了,全同步實在太大了。
SVN軟體可以用Tortoise SVN,使用方法一下就可以了。
當然也可以到cloudera或Yahoo!的hadoop官網的download鏈接去下載。