如何抓取貨幣websocket地址
⑴ 大神,怎樣用C#模擬websocket客戶端
給你一些建議,模擬登錄的。
static CookieContainer GetCookie(string postString, string postUrl)
{
CookieContainer cookie = new CookieContainer();
HttpWebRequest httpRequset = (HttpWebRequest)HttpWebRequest.Create(postUrl);//創建http 請求
httpRequset.CookieContainer = cookie;//設置cookie
httpRequset.Method = "POST";//POST 提交
httpRequset.KeepAlive = true;
httpRequset.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0";
httpRequset.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
httpRequset.ContentType = "application/x-www-form-urlencoded";//以上信息在監聽請求的時候都有的直接復制過來
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(postString);
httpRequset.ContentLength = bytes.Length;
Stream stream = httpRequset.GetRequestStream();
stream.Write(bytes, 0, bytes.Length);
stream.Close();//以上是POST數據的寫入
HttpWebResponse httpResponse = (HttpWebResponse)httpRequset.GetResponse();//獲得 服務端響應
return cookie;//拿到cookie
}
static string GetContent(CookieContainer cookie, string url)
{
string content;
HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(url);
httpRequest.CookieContainer = cookie;
httpRequest.Referer = url;
httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0";
httpRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
httpRequest.ContentType = "application/x-www-form-urlencoded";
httpRequest.Method = "GET";
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
using (Stream responsestream = httpResponse.GetResponseStream())
{
using (StreamReader sr = new StreamReader(responsestream, System.Text.Encoding.UTF8))
{
content = sr.ReadToEnd();
}
}
return content;
}
private void button1_Click(object sender, EventArgs e)
{
//抓取信息
string loginstr = "";
//從登陸的地址獲取cookie
CookieContainer cookie = GetCookie(loginstr, "");
//這個是進入後台地址
//webBrowser1.DocumentText = GetContent(cookie, "");
textBox1.Text = GetContent(cookie, "");
}
參考:c#模擬網站登錄獲取信息-天空阮
⑵ 如何使用Burpsuite抓取手機APP的HTTPS數據
1.所需條件
· 手機已經獲取root許可權
· 手機已經成功安裝xposed框架
· 電腦一台
2.詳細步驟
2.1 在手機上面安裝xposed JustTrustMe
JustTrustMe是一個去掉https證書校驗的xposed hook插件,去掉之後就可以抓取做了證書校驗的app的數據包。JustTrustMe在github的地址位: https://github.com/Fuzion24/JustTrustMe
安裝好模塊之後勾選JustTrustMe模塊,然後重啟手機
2.2 配置burpsuite
打開burpsuite,切換到Proxy,然後切換到下面的Options選項,然後點擊add,然後配置好埠,ip選擇本機的ip地址,然後點擊ok添加
將running框勾選上
2.3 導入burpsuite證書
在電腦端使用Firefox瀏覽器訪問設置的代理ip:埠,下載burpsuite證書,比如我上面的ip為192.168.1.105,埠為8080,就訪問http://192.168.1.105:8080/然後去下載證書
點擊CA certificate下載burpsuite的證書,保存證書文件
進入Firefox的設置裡面,選擇高級,然後選擇證書,點擊查看證書
然後選擇伺服器,點擊導入,導入剛剛下載的cacert.der證書,導入之後會多一個PortSwigger的證書,選中它,然後點擊導出,選擇X.509證書,然後重新命名導出,這里之所以要這樣導出證書,是因為手機上面識別不了burpsuite默認導出的證書格式,要轉換一下。
導出之後,將證書放到手機的sd卡中,然後進入手機設置,安全,從sd卡安裝,然後選擇放到手機的證書文件,如果手機沒有設置鎖屏密碼,這里會要求設置手機鎖屏密碼。不同的手機導入略微有些不同,但是都是在設置,安全設置裡面去導入證書。
點擊從sd卡安裝就可以選擇sd卡中的證書文件,然後安裝了。
2.4 在手機上配置代理伺服器
進入手機設置,WLAN,將手機和wifi連接到同一個路由器上面,然後設置wifi,有些手機是長按當前連接的wifi進行設置,有些是點擊向右的箭頭進行設置,這里兩中都說一下
第一種:
進入設置,點擊wlan,然後長按當前連接的wifi,選擇修改網路,滑到最下面,勾選顯示高級選項,然後選擇代理設置為手動代理伺服器主機名字填電腦ip,埠填你剛剛設置的埠。然後確定,就設置成功了。
第二種:
進入設置,wlan,點擊當前連接的wifi最右邊的向右詳情圖標,打開編輯當前連接的wifi,然後將代理設置選擇為手動,主機名填電腦ip地址,埠填剛剛在burpsuite裡面設置的地址,然後點擊確定保存,就設置成功了。
設置好之後便可以抓取https的數據包了,帶證書校驗的也可以正常抓取,如果不裝JustTrusMe插件,就不能抓帶證書校驗的app的https數據包。
使用burpsuite抓取https的教程到這里就結束了。
⑶ 什麼是量化數字貨幣交易過程中的量化是什麼意思
數字貨幣套利,你想知道的全在這里
什麼是數字貨幣套利
套利可以定義為在不同市場上購買一種資產並以更高的價格在另一市場上出售。在數字貨幣套利中,您可以搜索和比較不同交易所中的數字貨幣價格。然後你從更便宜的交易所買入並在價格更高的交易所賣出。然後,您將獲得價格差異作為您的利潤。套利在外匯市場已存在很長時間,但由於定量系統的大規模發展,已經無法實現套利。然而,數字貨幣套利可能是由於交易量的快速激增和交易所的低效導致價格差異。在大多數情況下,具有高交易量的大型交易所會以較少的交易量來指導較小交易所的數字貨幣價格。但是,交易所的價格總是有變化。這是數字貨幣套利成為可能的地方。
如何執行數字貨幣套利
對於數字貨幣套利的初學者來說,最常見和最簡單的方法是通過手動監控。查看您首選的數字貨幣的價格,在不同的交易所監控它們的價格,放置您的交易然後相應地轉移資金。還有一些數字貨幣套利機器人用於監控市場中數字貨幣的價格變動和差異。此外,移動交易應用程序還可以幫助您監控過程,以幫助您記錄任何可以幫助您獲利的變化。
1. 價差套利
不同交易所的數字貨幣價格不同。 阿爾法提供專為套利而設計的服務,稱為最佳行情捕捉器。這里列出了特定市場的所有交易所,其中包括從最貴到最便宜的等級。通過行情捕捉器,您可以決定是否根據您的獲利機會進行數字貨幣套利。
為了進行差價套利,你應該考慮:
窗體頂端
交易數字貨幣的費用
存放或取出數字貨幣的費用
區塊鏈網路費
將數字貨幣從一個交易所轉移到另一個交易所所花費的時間
將數字貨幣從一個交易所轉移到另一個交易所所花費的時間,如果所有這些選項都顯示您可以通過套利賺取利潤,那麼您可以繼續進行交易。請記住,套利在很大程度上取決於時間,因此它不是賺取利潤的永久機會。如果您的交易需要大量時間確認,價格可能會發生變化,從而影響風險。
2. 跨國套利
某個國家的數字貨幣的供求可能使其價格與世界其他地區不同。例如,由於供需不匹配,去年辛巴威的比特幣價格一路飆升。由於當地貨幣的波動性,很多人傾向於在BTC進行交易。此外,他們想把錢存入比特幣,因為他們的貨幣正在經歷通貨膨脹。這可能是數字貨幣套利的巨大機會。從不同國家的交易所購買並向價格非常高的國家的人們銷售可以幫助您獲利。但是,您應該謹慎對待數字貨幣的任何法律規定以及可能影響您的交易的退出限制。
3. 打新套利
一旦在交易所上市,對數字貨幣的需求通常會上升。此外,當他們在大型交易所上市時,他們很有可能進行數字貨幣套利,你可以進行。例如,當一枚數字貨幣在像Binance這樣的交易所上市時,它會經歷價值的增長,並且很多人都想購買它。從其他較小的交易所購買並以較高的價格在Binance上出售是數字貨幣套利的一個例子。
套利策略
作為數字貨幣套利交易者,您可以使用不同的策略來獲利。這些包括;
1. 收斂套利
該策略類似於使用定價套利。作為交易者,您可以利用交易價格的差異,通過購買數字貨幣被低估的地方進行,並在交易價格被高估的情況下將其賣空。當兩個單獨的價格在中間相遇時,您可以從收斂量中獲利。
2. 兩角套利
這個策略只涉及一枚數字貨幣。這是您購買數字貨幣並立即在不同的交易所出售以賺取利潤的地方。
3. 三角套利
您可以利用三種貨幣之間數字貨幣的價格差異來使用此策略。 BTC的美元價格可能與歐元和日元不同。因此,您可以以美元購買BTC,然後出售BTC以賺取歐元。然後,您將已兌現的歐元兌換成美元。它並不像我看起來那麼復雜。這三種貨幣是BTC,USD和EUR。
數字貨幣套利的原因
數字貨幣套利已在前一篇文章中解釋過。作為交易員,有幾個原因可以解釋為什麼你可以考慮數字貨幣套利。
1. 交易所眾多
市場上有200多個交易所。您可以在各種交易平台中比較數字貨幣和代幣的價格,以幫助您選擇交易數字貨幣和交易所進行交易。許多交易所增加了您進行定價套利的機會。
2. 數字貨幣的波動性
在上周看一下數字貨幣的市場表現就會向你展示密碼的波動性。市場波動可以幫助您以低數字貨幣套利風險獲利。但是,這需要您非常熱衷並確保您的預測得到充分考慮。通過研究市場,您可以使用其他策略來確保市場不會違反您的交易。
3. 快速賺錢的方法
數字貨幣套利交易可以在幾分鍾內完成。這也是建議的,因為當交易所的價格發生變化時,花費太長時間進行交易可能會導致損失。因此,數字貨幣套利可能會為您帶來更多的利潤,而不是其他傳統的購買和持有數字貨幣以便日後出售的方法。
4. 數字貨幣的初期
數字貨幣處於初期階段的事實意味著交易中幾乎沒有監管。數字貨幣之間也存在脫節,交易所,平台和行業參與者之間的信息傳遞速度很慢。與FoRex交易相比,交易商的數量也較少。這些因素增加了數字貨幣套利中可用的機會。
數字貨幣套利的風險
從理論上講,數字貨幣套利似乎很簡單,沒有風險。但如果就這么簡單,為什麼每個人都這樣做呢?任何有興趣的人都需要了解並警惕,存在風險和障礙。有了這些知識,那麼你就可以加入並可能受益。
1. 交易費用
大多數交易所對任何交易,礦工費,存款和取款收取費用。為了獲利,您需要考慮這些費用對您的交易產生的影響。盈利能力將取決於您需要支付的費用金額。永遠記住,如果沒有消除您對數字貨幣套利的預期利潤,費用將最小化。
2. KYC規定
交易所對客戶的規定可能會對加入交易所構成潛在風險。有時,您需要在交易所所在的國家/地區持有銀行賬戶才能進行交易。
3. 提款限額
交易所通常對可以在一天內從錢包中退出的金額進行限制。如果您想進行大宗交易,您可能很難進行有利可圖的套利交易。確保您知道在任何交易所開始數字貨幣套利之前您可以提取的資金限額。
4. 交易緩慢
全球加密市場的交易量有所增加。這可能會影響交易所的交易速度。有記錄顯示延遲提款可能會影響尋求從套利中獲利的人。此外,您應該考慮所交易的所有數字貨幣的轉移時間,因為它們不同。 BTC轉移比ETH轉移慢。交易開始時,礦工費也是一個考慮因素。如果您選擇較低的資金轉移費用,那麼您的交易時間將受到影響,可能會影響您的提幣。
5. API限制
許多交易所都有API調用率限制。這意味著作為交易者,您可以在交易所中查詢數據,時間為Y秒。這些限制在所有交易所都有所不同,它們限制了您可以採取的措施。建議您注意發送請求的次數,因為您可能會提早耗盡機會。有一些可以幫助你操縱這個,但它們非常罕見。這些是WebSocket API和RES介面
6. API集成
市場對交易所的API可以做什麼或它應該具有的數據沒有統一或標準的定義。因此,您需要學習每個交易所,了解它們的工作原理,了解它們的速率,身份驗證以及它們如何處理數據類型。這非常耗時,並且可能經常令人困惑,影響您的數字貨幣套利利潤。
7. 未能及時執行
您應該在數字貨幣套利中理解的風險是市場可能在幾秒鍾內轉向您。此外,如果您在執行賣出交易之前延遲,可能會進行另一次交易。將數字貨幣從一個交易所轉移到另一個交易所所花費的時間可以看到價格的快速變化。
8. 在交易所存儲數字貨幣
為了參與數字貨幣套利,您的數字貨幣需要存儲在交易所中,以便您可以在需要時使用它們。這是一種安全風險,因為有許多交換被黑客攻擊和加密竊取的情況。
9. 大額交易
數字貨幣套利交易似乎是一個非常有利可圖的過程。但是,考慮到費用和延誤,利潤可能非常小。因此,您可能需要為您進行大額交易以實現豐厚回報。
10. 競爭風險
更多的交易者正在加入加密領域。此外,更多的交易者正在學習和試驗數字貨幣套利。未來的競爭可能會有所增加。
三角套利1萬1天賺50,免費試用,限資產大於1000USDT前1000名,關注微信公眾號 貝塔數字貨幣量化套利 (微信號:beitafinance),7 x 24小時竭誠為您提供服務,不論牛市與熊市,穩賺套利收益,輕松量化,聰明投資。
⑷ fiddler 怎麼抓取scoket
1、清除電腦上的根證書,WIN+R快捷鍵,輸入:certmgr.msc, 然後回車,查找所有fiddler證書,然後刪除。
⑸ 如何批量抓取淘寶天貓阿里巴巴京東、拼多多主圖、手機詳情頁
2013年被很多人稱為互聯網金融爆發元年。互聯網和金融界的成功「牽手」創造出了一個又一個全新的理財平台,也轉變了許多人理財和消費的方式,其中余額寶的推出無疑成為最閃亮的一顆新星。2013年6月17日,第三方支付平台支付寶宣布推出余額增值服務―余額寶。用戶只需在支付寶網站將一定資金轉入余額寶賬戶,即相當於購買了天弘基金的「增利寶」貨幣基金。這標志著支付寶在擁有第三方支付功能的同時還有了投資理財功能。余額寶公布的七日年化收益率相當於銀行活期存款的十倍,如此高的收益率吸引了眾多用戶。
余額寶的發展給銀行、基金、券商帶來了顛覆性的變化。由於余額寶的出現,貨幣基金實際上已經具有活期存款的功能,可以有條件與銀行在這個品種上形成競爭。互聯網的特點則是邊際成本遞減,用戶越多,成本越低,甚至趨近零。這讓余額寶能按一塊錢的最低門檻服務那些小客戶。不僅如此,海量客戶、頻繁交易、小客單價組成在一起,通過大數據技術,還形成了相對穩定的趨勢。周曉明說,通過大數據技術,余額寶的基金經理可以准確預測第二天的流動性需求,偏離度不超過5%。在此基礎上,基金經理可以更精準地投資,也為用戶提供更穩定的收益。因此,余額寶尤其吸引中小投資者。
相比較其它理財產品,余額寶具有一系列優勢:
1、流動性強,使用靈活。余額寶隨時支持消費、支付寶轉賬,這一大特點的優勢表現在余額寶中的資金一方面可以保持增值,另一方面又可以隨時支取。
2、最低購買金沒有限定。余額寶的購買最低限額為1元,如此低的起購資金實現了人人都可以投資的親民理財,給手頭擁有較少現金的人群提供了投資機會。
3、操作流程簡單。余額寶的注冊和投資流程類似於支付寶充值和網購,簡便快捷、易於操作,5~10秒之內便可以完成申購。與傳統的理財產品相比,剔除了手續繁瑣的弊端。此外,用戶能隨時登陸客戶端進行收益額的查詢,方便理財。
4、收益較高。收益較高是余額寶吸引投資者的一個關鍵,與同期的銀行活期儲蓄相比,余額寶的收益水平遠高出一大截,甚至高出一般的銀行理財產品,這與其投資於基金是密不可分的。
但是,余額寶也具有一些無法避免的劣勢:
1、收益不穩定。由於余額寶將資金用於投資基金,這必然導致余額寶的收益率不穩定,對於追求穩定收益的投資者來說,可能更加青睞定期投資帶來預期收益。
2、存在安全性問題。雖然余額寶推出了全額理賠的客戶保障,但是網路的風險依然存在,對於中老年人,或是投資金額較大的人群來說,會放棄有資金被盜風險的理財方式。
3、投資發生糾紛風險:余額寶沒有告知用戶貨幣基金的投資風險,一旦發生風險,將導致投資虧損,可能引起一系列的法律糾紛。
有利既有弊,每件事情都具有雙面性,余額寶是一種風險與收益並存的理財產品,但是,對於小額投資者,余額寶回報高、轉出方便、可以網上購物付款等特點,讓余額寶十分受歡迎。下面,小編就來分享一下如何使用余額寶理財,輕松實現高回報理財。
方法/步驟1:
登錄支付寶網站,填寫賬號和密碼,點擊登錄。或者在我的淘寶裡面的「支付寶綁定設置」裡面進入支付寶賬號。
進入「賬戶資產」 。
點擊余額寶的管理按鈕,進入余額寶。
點擊「轉入」。
輸入金額點擊下一步。
選擇付款的銀行卡,點擊下一步。
輸入密碼以後點擊確認付款,就可以把銀行卡的錢轉入的余額寶里了。
方法/步驟2:
登錄支付寶網站,填寫賬號和密碼,點擊登錄。或者在我的淘寶裡面的「支付寶綁定設置」裡面進入支付寶賬號。
進入「賬戶資產」 。
點擊余額寶的管理按鈕,進入余額寶。
在「功能設置」選項的「自動轉入」欄 點擊「開通」。
填寫保留金額,點擊「同意協議並確定」。
點擊「同意協議並繼續」。
⑹ 《區塊鏈項目開發指南》讀書筆記
ethash
答:在DAPP中,沒有一個中心伺服器來協調節點,或者決定什麼是對,什麼是錯,因此應對這個挑戰確實不容易,一致性協議(concensus protocol)可用於解決這個問題。
補充:共識演算法的核心就是解決拜占庭將軍問題(分布式網路一致性問題)。
答:修改bug或者更新DAPP很困難。
如果我需要從一個中心化應用抓取數據,如車輛違章信息,怎麼保證抓取的數據是真實有效的?
答:為了訪問中心化的API,可以使用Oraclize服務可以作為中間人,Oraclize為從中心化服務智能合約中抓取的數據提供TLSNotary驗證。
中心化應用的所有者需要有盈利才能長期維護應用的運行,而DAPP雖然沒有所有者,但是跟中心化應用一樣,DAPP節點需要硬體和網路資源才能維持運行。DAPP節點需要一些有用的回報來維持運行,於是內部貨幣登場了。大多數DAPP都有內置內部貨幣,或者可以說最成功的DAPP都有內置內部貨幣。如以太幣
授權的DAPP不對所有人開放。授權的DAPP繼承了免許可權DAPP的全部屬性,但需要許可權才能參與到網路中去。授權的DAPP與免許可權的DAPP的共識協議是不同的。授權的DAPP沒有內部貨幣。
超級賬本(Hyperledger)項目致力於開發創建授權的DAPP技術。
為什麼少數國家認定比特幣是非法的,大部分國家對此還沒有做出決定呢?原因如下:
星際文件存儲系統(InterPlanetary File System)是一個去中心化的文件系統。
目標是通過使交易幾乎瞬間完成,並隱藏交易賬戶的信息,還可以防止他人用ISP追蹤所有者。
任何人都可以成為以太坊網路中的礦工。每個礦工獨自解決問題,第一個解決問題的礦工是勝利者,它得到的回報是5個以太幣和該區塊中全部交易的交易費。區塊鏈中有多少個區塊沒有限制,可以生成的以太幣總數也沒有限制。
網路中的任何節點都可以檢查區塊鏈是否合法,首先檢查交易在區塊鏈中是否合法以及時間戳的驗證情況,然後檢查區塊的目標值和隨機數是否合法、礦工是否得到合法的回報等。
節點是如何發現網路中的其他節點的呢?
以太坊的節點發現協議:Kadelima,在這種協議中,有一種特殊節點Bootstrap節點。它保存了一段時間內與它連接的所有節點列表,但其本身不保存區塊鏈。
當對等節點連接到以太坊網路時,它們首先連接到Bootstrap節點。
可以有多種以太坊實例,也就是說,不同的網路每個都有自己的網路ID。
兩種主要的以太坊網路是主網和測試網。以太幣在主網上交易,而測試網供開發人員測試。
一個去中心化的通信協議,它支持廣播、用戶到用戶、加密信息等,但不用於傳輸大數據。
一個去中心化的文件系統。
geth為其他應用提供了與其通信的JSON-RPC API。使用HTTP、WebSocket和其他協議服務於JSON-RPC API。
JSON-RPC API提供的API分成如下類型:
以太坊網路中的節點默認用 30303 埠通信。
--networkid 用於指定網路ID,1代表主網網路ID,預設默認值為1,2代表測試網路ID
--dev 標記運行一個私有網路
--etherbase 指定挖礦賺取的回報存入的錢包地址
--unlock 解鎖一個或者多個賬戶
以太坊錢包與geth捆綁在一起。運行以太坊時,它會嘗試發現一個本地geth實例並與之連接;如果它不能發現geth正在運行,它就啟動自己的geth節點。以太坊錢包使用IPC與geth通信。geth支持以文件為基礎的IPC。
以太坊下一個主要更新的名字。Serenity把共識協議改為casper,並將整合狀態通道和分片。
Casper 實施了一個進程,使得它可以懲罰所有的惡意因素。這就是權益證明在Casper下是如何工作的:
驗證者押下一定比例的他們擁有的以太幣作為保證金。然後,他們將開始驗證區塊。也就是說,當他們發現一個可以他們認為可以被加到鏈上的區塊的時候,他們將以通過押下賭注來驗證它。
如果該區塊被加到鏈上,然後驗證者們將得到一個跟他們的賭注成比例的獎勵。但是,如果一個驗證者採用一種惡意的方式行動、試圖做「無利害關系」的事,他們將立即遭到懲罰,他們所有的權益都會被砍掉。正如你可以看到的,Casper被設計成可以在一個無需信任的系統上工作,並且是更加拜占庭容錯的。
支付通道 功能允許將兩個以上向另一個賬戶發送以太幣的交易合並成兩個交易。其工作原理為:假設X是一個視頻網站老闆,Y是個用戶。X每分鍾收費1個以太幣。現在X想讓Y看視頻期間每分鍾交一次錢。當然,Y可以每分鍾廣播交易,但是這里有些問題,例如X不得不等待確認,所以視頻就會中斷一會。支付通道可以解決這個問題。使用支付通道,Y可以廣播一個鎖定交易,為X把一些以太幣(比如100個以太幣)鎖定一段時間(比如24小時)。現在每看完一分鍾視頻,Y將發送一個簽名記錄表示可以解鎖,一個以太幣就進入X的賬戶,其餘的進入Y的賬戶。再過一分鍾,Y將發送一個簽名記錄表示可以解鎖,兩個以太幣就進入X的賬戶,其餘的進入Y的賬戶。Y觀看X網站的視頻過程中,該過程將持續。現在假設Y看完了100小時視頻或者24小時時間到了,X將向網路廣播最後的簽名記錄,以把錢收到自己的賬戶里。如果X沒有在24小時內提款,全款會返還給Y。所以在區塊鏈中,我們將看到lock和unlock兩種交易。
Sybil攻擊
51%攻擊
補充:不能存儲較大數據,目前有Swarm與IPFS等分布式存儲方式可供選擇
把所有東西都存在內存里,因此,節點一旦重啟,將丟失以前的狀態。
默認監聽埠:8545
⑺ WebSocket+SLB(負載均衡)會話保持解決重連問題
寫在最前面:由於現在游戲基本上採用全球大區的模式,全球玩家在同一個大區進行游戲,傳統的單服模式已經不能夠滿足當前的服務需求,所以現在游戲伺服器都在往微服務架構發展。當前我們游戲也是利用微服務架構來實現全球玩家同服游戲。
玩家每次斷線(包括切換網路/超時斷線)後應該會重新連接伺服器,重連成功的話可以繼續當前情景繼續游戲,但是之前寫的底層重連機制一直不能生效,導致每次玩家斷線後重連都失敗,要從賬號登陸開始重新登陸,該文章寫在已經定位了重連問題是由SLB引起後,提出的解決方案。
每次重連後,客戶端向SLB發送建立連接,SLB都會重新分配一個網關節點,導致客戶端連接到其他網關,重連失敗。
會話保持的作用是什麼?
開啟SLB會話保持功能後,SLB會記錄客戶端的IP地址,在一定時間內,自動將同一個IP的連接轉發到上次連接的網關。
在網路不穩定的情況下,游戲容易心跳或者發包超時,開啟會話保持,能解決大部分情況下的重連問題。
但是在切換網路的時候,手機網路從Wifi切換成4G,自身IP會變,這時候連接必定和伺服器斷開,需要重新建立連接。由於IP已經變化,SLB不能識別到是同一個客戶端發出的請求,會將連接轉發到其他網關節點。所以使用TCP連接的情況下,SLB開啟會話保持並不能解決所有的重連問題。
另外某些時刻,手機頻繁開啟和斷開WI-FI,有時候可能不會斷開網路,這並不是因為4G切換WI-FI時網路沒斷開,從4G切換到Wi-Fi網路,因為IP變了,伺服器不能識別到新的IP,連接肯定是斷開的。這時候網路沒斷開,主要是因為現在智能手機會對4G和Wi-Fi網路做個權重判斷,當Wi-Fi網路頻繁打開關閉時,手機會判斷Wi-Fi網路不穩定,所有流量都走4G。所以網路沒斷開是因為一直使用4G連接,才沒有斷開。想要驗證,只需要切換Wi-Fi時,把4G網路關閉,這樣流量就必定走Wi-Fi。
上面說過,四層的TCP協議主要是基於IP來實現會話保持。但是切換網路的時候客戶端的IP會變。所以要解決切換網路時的重連問題,只有兩個方法:1. 當客戶端成功連接網關節點後,記錄下網關節點的IP,下次重連後不經過SLB,直接向網關節點發送連接請求。2.使用 SLB的七層(HTTP)轉發服務。
當客戶端經過SLB將連接轉發到網關時,二次握手驗證成功後向客戶端發送自己節點的IP,這樣客戶端下次連接的時候就能直接連接網關節點。但是這樣會暴露網關的IP地址,為安全留下隱患。
如果不希望暴露網關的IP地址,就需要增加一層代理層,SLB將客戶端請求轉發到代理層,代理層再根據客戶端帶有的key,轉發到正確的網關節點上。增加一層代理層,不僅會增加請求的響應時間,還會增加整體框架的復雜度。
阿里雲的七層SLB會話保持服務,主要是基於cookie的會話保持。客戶端在往伺服器發送HTTP請求後,伺服器會返回客戶端一個Response,SLB會在這時候,將經過的Response插入或者重寫cookie。客戶端獲取到這個cookie,下次請求時會帶上cookie,SLB判斷Request的Headers裡面有cookie,就將連接轉發到之前的網關節點。
HTTP是短鏈接,我們游戲是長連接,所以用HTTP肯定不合適。但是可以考慮基於HTTP的WebSocket。
什麼是WebSocket?
WSS(Web Socket Secure)是WebSocket的加密版本。
SLB對WebSocket的支持
查看阿里雲SLB文檔對WS的支持,說明SLB是支持WS協議的,並且SLB對於WS無需配置,只需要選用HTTP監聽時,就能夠轉發WS協議。說明WS協議在SLB這邊看來就是一個HTTP,這樣WS走的也是七層的轉發服務。只要SLB能夠正常識別WS握手協議里Request的cookie和正常識別伺服器返回的Response並且往裡面插入cookie,就可以利用會話保持解決重連問題。
Go語言實現WS伺服器有兩種方法,一種是利用golang.org/x/net下的websocket包,另外一種方法就是自己解讀Websocket協議來實現,由於WS協議一樣是基於TCP協議之上,完全可以通過監聽TCP埠來實現。
客戶端發送Request消息
伺服器返回Response消息
其中伺服器返回的Sec-WebSocket-Accept欄位,主要是用於客戶端需要驗證伺服器是否支持WS。RFC6455文檔中規定,在WebSocket通信協議中服務端為了證實已經接收了握手,它需要把兩部分的數據合並成一個響應。一部分信息來自客戶端握手的Sec-WebSocket-Keyt頭欄位:Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==。對於這個欄位,服務端必須得到這個值(頭欄位中經過base64編碼的值減去前後的空格)並與GUID"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"組合成一個字元串,這個字元串對於不懂WebSocket協議的網路終端來說是不能使用的。這個組合經過SHA-1掩碼,base64編碼後在服務端的握手中返回。如果這個Sec-WebSocket-Accept計算錯誤瀏覽器會提示:Sec-WebSocket-Accept dismatch
如果返回成功,Websocket就會回調onopen事件
游戲伺服器的使用的TCP協議,是在協議的包頭使用4Byte來聲明本協議長度,然後將協議一次性發送。但是在WS協議是通過Frame形式發送的,會將一條消息分為幾個frame,按照先後順序傳輸出去。這樣做會有幾個好處:
websocket的協議格式:
參數說明如下:
阿里雲的SLB開啟HTTP監聽後,會檢查過往的Request和Response請求,收到伺服器返回的Response後,會往Response插入一個Cookie
客戶端收到伺服器的Response後,可以在Header中查到有個「Set-Cookie」欄位,裡面是SLB插入的Cookie值
客戶端斷開連接後,下次發送請求需要往Headers插入Cookie欄位
分別在阿里雲的兩台ECS實例上部署WS伺服器,打開8000埠,開啟一個SLB服務,SLB服務選擇HTTP方式監聽,並且打開會話保持功能,Cookie處理方式選擇植入Cookie。Demo伺服器沒有做HTTP健康監聽的處理,健康檢查這塊可以先關掉。
在兩台ECS上啟動WS伺服器,然後本地運行客戶端,分別測試兩台伺服器是否能正常連接,測試完畢後,測試SLB能否正常工作。伺服器和SLB都正常的情況下,運行客戶端,客戶端會得到以下結果
收到的三次Cookie都相同,說明Cookie是有正常植入工作的,並且三次都被SLB正確抓取了。
收到的三次serverId也都是同樣的值,說明三次都是同一個ECS上的伺服器響應。
至此,驗證成功。
Websocket+SLB會話保持能夠解決超時重連和切換網路時重連的問題。
參考:
阿里雲會話保持
解答Wi-Fi與4G網路切換的困惑
WebSocket的實現原理
阿里雲SLB對WebSocket的支持
HTTP Headers和Cookie
⑻ Wireshark抓取websocket包
項目中遇到一個問題,在排查網路數據包是否丟包時,由於對Wireshark不熟練,只根據TCP埠號過濾,而項目中採用了WebSocket協議,過濾結果中有大量的無用數據,分析時浪費了大量時間,防止以後再犯類似的錯誤,在這里做個記錄
Wireshark Version 2.6.5
tcp.port == 80 && (http || websocket)
⑼ 前端抓手機抓包可以看頁面樣式嗎
時隔 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 標准中,沒有對通信端身份驗證的標准。對於伺服器來說,它接收的 HTTP 請求報文只要格式符合規范,就發送響應報文。
對於客戶端來說也是如此,它無法校驗伺服器的身份,比如它連接的 http://www.jecyu.com 的主機,但由於中間節點的存在,最終連接的可能是 http://www.jerry.com 的主機。
因此,對於 HTTP 抓包,無需做過多的處理,只需要讓中間人負責轉發客戶端和服務端的數據包。
1.2.2 HTTPS 抓包原理
HTTP 是明文傳輸,容易受到中間人攻擊,不安全。
HTTPS 語義仍然是 HTTP,只不過是在 HTTP 協議棧中 http 與 tcp 之間插入安全層 SSL/TSL。
安全層採用對稱加密的方式加密傳輸數據和非對稱加密的方式來傳輸對稱密鑰,解決 http 數據沒有加密、無法驗證身份、數據容易纂改三個核心問題。
HTTP + 加密 + 認證 + 完整性保護 = HTTPS
其中驗證身份問題是通過驗證伺服器的證書來實現的,證書是第三方組織(CA 證書簽發機構)使用數字簽名技術管理的,包括創建證書、存儲證書、更新證書、撤銷證書。
瀏覽器連接至一個 HTTPS 網站,伺服器發送的不僅僅只是伺服器實體證書,而是一個證書鏈,但不包含根證書,根證書會被內嵌在 Windows, Linux, macOS, Android, iOS 這些操作系統里。
其中校驗證書分為兩步,證書的簽發者校驗和伺服器實體證書校驗
1、證書鏈校驗:
1.1 瀏覽器從伺服器實體證書的上一級證書(比如 B 證書)獲取公鑰,用來校驗伺服器實體證書的簽名(簽名是通過 CA 機構的私鑰簽名的),校驗成功則繼續,否則證書校驗失敗。
1.2 瀏覽器從 B 證書的上一級證書(比如 C 證書)獲取公鑰,用來校驗 B 證書的簽名,
校驗成功則繼續,否則證書校驗失敗。
1.3 瀏覽器迭代校驗每張證書的簽名,最後會找到自簽名的根證書(簽發者和使用者是同一個人),由於瀏覽器已經集成了根證書,可以充分信任根證書的公鑰,完成最後的簽名。
2、伺服器實體證書校驗:訪問的域名信息是否與證書一致、日期、證書擴展校驗等。
了解完證書校驗後,我們來看看具體的 https 通信流程:
首先是 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 加密通信之前:
截取客戶端發送的包含證書的報文,偽裝成服務端,把自己的證書發給客戶端,然後拿到【客戶端返回的包含對稱加密通信密鑰的報文】,生成中間人與客戶端對稱加密的密鑰。
同樣偽裝成客戶端,以服務端自己的非對稱公鑰加密【客戶端返回的包含對稱加密通信密鑰的報文】發給服務端,獲得服務端生成的對稱加密密鑰。
這樣一來,加密通信建立完成,而中間人拿到了通信的數據密鑰,可以查看、修改 HTTPS 的通信報文。
這里客戶端與中間人通信、中間人與服務端通信,都是正常建立了 HTTPS 加密連接的。
其中很重要的一步是瀏覽器的根證書校驗,CA 機構不可能隨便給一個中間人簽發不屬於它的域名證書,也就不在客戶端的操作系統上了,因此只能把中間人的根證書,導入到客戶端的操作系統了,以此完成建立加密通信時對中間人證書的驗證。
1.3 電腦如何抓手機的包
要想通過電腦端獲取手機 Web 應用的數據包,根據前面所學,就需要中間人策略。
PC 端建立一個伺服器中間人進程,偽裝為 web 應用的目標伺服器。手機端 web 應用發送的請求數據先經過中間人,中間人進行攔截處理再發送給目標伺服器。反過來,目標伺服器發送的數據包先通過中間人,再由中間人響應給瀏覽器客戶端。
這里要注意的是,無論是個人電腦PC,還是移動端手機,都需要接入互聯網網路,可以相互找到對方才能建立通信。
一般對開發來說,個人電腦本地起的伺服器進程,在公網上是訪問不到的。一般是無線區域網,個人電腦與手機端連接同一個路由器發出的 Wi-Fi,就可以相互通信。
具體步驟:
在 PC 電腦本地起一個伺服器進程,監聽一個埠比如 8899
在手機上連接同一個區域網,配置網路代理,指向 PC 端的 IP 地址和 8899 埠
這樣一來,手機上所有的網路通信都會被先轉發到 PC 端的 8899 埠,就可以對數據包進行分析處理
拿訪問 youtuBe 來說,比如電腦已經使用【伺服器軟體】成功訪問,此時只要手機配置代理指向電腦 ip 地址和指定埠,手機就可以同樣訪問 youtuBe了。
2. 抓包工具 whistle
2.1 whistle 是什麼
Whistle 是基於 Node 實現的跨平台抓包免費調試工具,其主要特點:
1、完全跨平台:支持 Mac、Windows 等桌面系統,且支持服務端等命令行系統
2、功能強大:
支持作為 HTTP、HTTPS、SOCKS 代理及反向代理
支持抓包及修改 HTTP、HTTPS、HTTP2、WebSocket、TCP 請求
支持重放及構造 HTTP、HTTPS、HTTP2、WebSocket、TCP 請求
支持設置上游代理、PAC 腳本、Hosts、延遲(限速)請求響應等
支持查看遠程頁面的 console 日誌及 DOM 節點
支持用 Node 開發插件擴展功能,也可以作為獨立 npm 包引用
3、操作簡單
直接通過瀏覽器查看抓包、修改請求
所有修改操作都可以通過配置方式實現(類似系統 Hosts),並支持分組管理
項目可以自帶代理規則並一鍵配置到本地 Whistle 代理,也可以通過定製插件簡化操作
如何快速使用 whistle
先安裝 node,建議用 nvm 管理
全局安裝 whistle
1
npm i -g whistle & w2 start
安裝後,可以在電腦上設置全局代理,代理的埠為 8899.
1
2
3
w2 proxy // 設置全局代理
w2 proxy off // 關閉全局代理
就可以通過瀏覽器訪問 http://127.0.0.1:8899/ 查看抓包、修改請求等。
如果你不想使用全局代理,就可以安裝 SwitchyOmega 插件,按需對某些網站設置 whistle 代理。
選擇 Whistle 代理
設置 Whistle 代理
2.2 whistle 可以做的事情
whistle 可以做的事情很多,以下是官網圖:
一些例子配置如下圖所示:
3. whistle 實戰案例
3.1 原生 app 載入 PC本地代碼開發
在原生 app 上已經通過 h5 域名載入了 web 頁面,但是本地開發時不想每次都走流水線或本地打包上傳代碼。
需要把原生 app 的請求代理到本地伺服器上來,前提條件是 wifi 手機與電腦可相互訪問,也就是前面提到的電腦抓 pc 的包。
因為我的 web 服務端是 https 應用,因此需要下載 whistle 提供的根證書,手動導入到手機上。
點擊 HTTPS 菜單,然後使用手機掃描二維碼,使用手機瀏覽器打開即可下載,在手機證書中設置進行導入並且設置信任。
此時,再在手機上配置代理指向 PC 電腦的 IP和 whistle 監聽的埠即可在電腦上截獲數據包。
我本地webpack 啟動的伺服器應用訪問地址為:xxx.xxx.xxx.xxx:8080
whistle 的配置規則:
1
2
3
4
5
6
7
8
9
# Rules
# 訪問首頁走本地
jecyu.com/webs/short-transport http://xxx.xxx.xxx.xxx:8080?deptCode=755DL # 首頁路徑
# 後續的請求都使用本地代碼
jecyu.com http://xxx.xxx.xxx.xxx:8080?deptCode=755DL
其中試過在原生 app 訪問本地應用時出現錯誤「 webpack 會提示 invalid host header」,解決方案是在 devServer 配置添加即可:
1
2
3
4
5
devServer: {
allowedHosts: 'all',
}
至此,成功讓原生 app 訪問PC 端本地的開發代碼。
3.2 查看移動端的 DOM 樣式
Whistle 能夠通過內置的 Weinre 去實現查看移動端的 DOM 樣式,配置規則如下
1
2
3
# 設置 weinre
https://juejin.cn weinre://test
手機上重新訪問 juejin.cn 網站,然後打開 weinre 可以看到如下,綠色表示遠程連接成功
⑽ 數字貨幣歷史數據除了交易所獲取還有什麼方法比較方便較長時間獲取
一些數字貨幣數據服務商一般都有統一介面獲取歷史數據的,國內的有Matrix data,預測者之類的,數據各有千秋,個人感覺Matrix data更好,預測者個人的還有挺大進步空間。