如何抓取货币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更好,预测者个人的还有挺大进步空间。