当前位置: 首页 > 编程日记 > 正文

Wireshark网络抓包(三)——网络协议

一、ARP协议

ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址。

IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信;

在通过以太网发生IP数据包时,先封装第三层(32位IP地址)和第二层(48位MAC地址)的报头;

但由于发送数据包时只知道目标IP地址,不知道其Mac地址,且不能跨越第二、三层,所以需要使用地址解析协议。

ARP工作流程分请求和响应:

在dos窗口内“ping”某个域名抓取到的包:

二、IP协议

IP(Internet Protocol)互联网协议,主要目的是使得网络间能够互相通信,位于OSI第三层,负责跨网络通信的地址。

当以广播方式发送数据包的时候,是以MAC地址定位,并且需要电脑在同一子网络。

当不在同一子网络就需要路由发送,这时候就需要IP地址来定位。

同样在dos窗口内“ping”某个域名抓取到的包:

三、TCP协议

TCP(Transmission Control Protocol)传输控制协议,一种面向连接、可靠、基于IP的传输层协议,主要目的是为数据提供可靠的端到端传输。

在OSI模型的第四层工作,能够处理数据的顺序和错误恢复,最终保证数据能够到达其应到达的地方。

1)标志位

SYN: 同步,在建立连接时用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。

FIN: 终止,FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。

ACK: 确认,ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。

DUP ACK:重复,重复确认报文,有重复报文,一般是是丢包或延迟引起的,从这个报文看应该是丢包了。

URG:紧急,当URG=1时,表示报文段中有紧急数据,应尽快传送

PSH:推送,当发送端PSH=1时,接收端尽快的交付给应用进程

RST:复位,当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接

2)端口

客户端与不同服务器建立连接时,源端口和目标端口可不同。

3)TCP三次握手

4)TCP四次挥手

TCP四次断开,例如关闭页面的时候就会断开连接。

5)TCP概念

1. 发送窗口

无法简单的看出发送窗口的大小,发送窗口会由网络因素决定。发送窗口定义了一次发的字节,而MSS定义了这些字节通过多少个包发送。

2. 拥塞窗口(cwnd)

描述源端在拥塞控制情况下一次最多能发送的数据包的数量。

在发送方维护一个虚拟的拥塞窗口,并利用各种算法使它尽可能接近真实的拥塞点。

网络对发送窗口的限制,就是通过拥塞窗口实现的。

3. 在途字节数(bytes in flight)

已经发送出去,但尚未被确认的字节数。

在途字节数 = Seq + Len - Ack

其中Seq和Len来自上一个数据发送方的包,而Ack来自上一个数据接收方的包。

4. 拥塞点(congestion point)

发生拥塞时候的在途字节数就是该时刻的网络拥塞点。

先从Wireshark中找到一连串重传包中的第一个,再根据该Seq找到原始包最后计算该原始包发送时刻的在途字节数。

5. 慢启动

RFC建议初始拥塞窗口发送2、3、或4个MSS,如果发出去的包都能得到确认,则表明还没到拥塞点,可以收到n个确认增加n个MSS

6. 拥塞避免

慢启动持续一段时间后,拥塞窗口达到一个较大的值,就得放慢RFC建议在每个往返时间增加1个MSS,比如发了16个MSS全部确认,那么就增加到17个MSS

7. 超时重传

发出去的包在等待一段时间(RTO)后,没有收到确认,就只能重传了

8. 快速重传(Fast Retransmit)

不以时间驱动,而以数据驱动重传。如果包没有连续到达,就ACK最后那个可能被丢了的包,如果发送方连续收到3次相同的ACK,就重传。

9. SACK(Selective Acknowledgment)

选择性确认重传,ACK还是Fast Retransmit的ACK,SACK则是汇报收到的数据,在发送端就可以根据回传的SACK来知道哪些数据到了,哪些没有到。

10. 延迟确认(Delayed ACK)

如果收到一个包后暂时没什么数据发给对方,那就延迟一段时间再确认。假如这段时间恰好有数据要发送,那数据和确认信息可以在一个包中发送。

11. LSO

LSO拯救CPU而出的创意,为了缓解CPU的压力,把它的一部分工作外包给了网卡,比如TCP的分段。

启用LSO之后,TCP层就可以把大于MSS的数据块直接传给网卡,让网卡负责分段。

比如“Seq=348586,Len=2776”,被网卡分为“Seq=348586,Len=1388”和“Seq=349974,Len=1388”两个包。

在发送端抓包相当于站在CPU角度,只看到一个分段前的大包,而接收端就可以看到两个包。

所以才会出现只见重传包,不见原始包的情况。

12. Nagle算法

在发出去的数据还没有被确认之前,假如又有小数据生成,那就把小数据收集起来,凑满一个MSS或等收到确认后再发送。

13. Vegas算法

通过监控网络状态来调整发包速度。

当网络状态良好时,数据包的RTT比较稳定,这时可以增大拥塞窗口;

当网络开始繁忙时,数据包开始排队,RTT就会变大,这时就减小拥塞窗口。

6)选项字段

PTR(Pointer Record):指针记录,PTR记录解析IP地址到域名

TTL(Time to live)

存活时间,限制数据包在网络中存在的时间,防止数据包不断的在IP互联网络上循环,初始值一般为64,每经过一个路由减去1。

通过TTL过滤运营商劫持包,假的包是抢先应答的,所以和真实包的TTL可能不同(例如ip.ttl == 54)

Seq:数据段的序号,当接收端收到乱序的包,就能根据此序号重新排序,当前Seq等上一个Seq号与长度相加获取到

Len:数据段的长度,这个长度不包括TCP头

Ack:确认号,接收方向发送方确认已经收到了哪些字节

RTT(Round Trip Time):也就是一个数据包从发出去到回来的时间

RTO(Retransmission TimeOut):超时重传计数器,描述数据包从发送到失效的时间间隔,是判断数据包丢失与否及网络是否拥塞的重要参数

MTU(Maximum Transmit Unit):最大传输单元

MSS(Maximum Segment Size):最长报文段,TCP包所能携带的最大数据量,不包含TCP头和Option。一般为MTU值减去IPv4头部(至少20字节)和TCP头部(至少20字节)得到。

Win(Window Size):声明自己的接收窗口

TCP Window Scale:窗口扩张,放在TCP头之外的Option,向对方声明一个shift count,作为2的指数,再乘以TCP定义的接收窗口,得到真正的TCP窗口

DF(Don't fragment):在网络层中,如果带了就丢弃没带就分片

MF(More fragments):0表示最后一个分片,1表示不是最后一片

7)过滤表达式

握手请求被对方拒绝:tcp.flags.reset === 1 && tcp.seq === 1

重传的握手请求:tcp.flags.syn === 1 && tcp.analysis.retransmission

过滤延迟确认:tcp.analysis.ack_rtt > 0.2 and tcp.len == 0

四、UDP协议

UDP(User Datagram Protocol)用户数据报协议,提供面向事务的简单不可靠信息传送服务。

将网络数据流压缩成数据包的形式。每一个数据包的前8个字节保存包头信息,剩余的包含具体的传输数据。

虽然UDP是不可靠的传输协议,但它是分发信息的理想协议,例如在屏幕上报告股票市场、显示航空信息;

在路由信息协议RIP(Routing Information Protocol)中修改路由表、QQ聊天、迅雷、网络电话等。

TCP的效率不一定比UDP低,只要窗口足够大,TCP也可以不受往返时间的约束而源源不断地传数据。

1)UDP的优势

1. UDP 协议的头长度不到TCP头的一半,所以同样大小的包里UDP携带的净数据比TCP包多,

2. 没有Seq和Ack等概念,省去了建立连接的开销,DNS解析就使用UDP协议。

2)UDP的劣势

1. 超过MTU的时候,发送方的网络层负责分片,接收方收到分片后再组装起来,这个过程会消耗资源,降低性能。

2. 没有重传机制,丢包由应用层处理,某个写操作有6个包,当有一个丢失的时候,就要将6个包重新发送。

3. 分片机制存在弱点,接收方是根据包中的“More fragments”的flag来判断是否包已接收完,1表示还有分片,0表示最后一个分片,可以组装了。

如果持续发送flag为1的UDP,接收方无法组装,就有可能耗尽内存。

五、ICMP协议

ICMP(Internet Control Message Protocol)网际报文控制协议,用于传输错误报告控制信息,对网络安全有极其重要的意义。

例如请求的服务不可用、主机或路由不可达,ICMP协议依靠IP协议来完成任务,是IP协议的一个集成部分。

通常不被用户网络程序直接使用,多用于ping和tracert等这样的诊断程序。

六、DNS协议

DNS(Domain Name System)域名系统,DNS就是进行域名解析的服务器。

DNS协议运行在UDP协议之上,端口为53,工作原理如下:

DNS的解析过程:

DNS客户机向本地域名服务器A发送查询,如果A中没有保存IP地址记录,A就会发请求给根域名服务器B

如果B中也没有,A就发请求给C,再没有就发请求给D,然后是E,找到后将地址发给DNS客户机。

域名解析过程涉及到递归查询和迭代查询。

客户机再与Web服务器连接。

七、HTTP协议

HTTP(HyperText Transfer Protocol)超文本传输协议,HTTP是一个应用层协议,无状态,由请求和响应构成,是一个标准的客户端服务器模型。

HTTP工作流程如下:

下面是报文首部字段的说明,表格的摘自《图解HTTP》。

HTTP请求头域:

 Accept 用户代理能够处理的媒体类型(MIME)及媒体类型的相对优先级,“text/plain;q=0.3”
 Accpet-Charset 通知服务器用户代理支持的字符集及字符集的相对优先顺序,“iso-8859-5”
 Accept-Encoding 告知服务器用户代理支持的内容编码及优先级顺序“gzip,deflate”
 Accept-Language 告知服务器用户代理能够处理的自然语言集及优先级,“zh-cn,zh;q=0.7”
 Authorization 用户代理的认证信息(证书值),“Basic dWVub3NlbjpwYNzd==”
 Expect 期望出现的某种特定行为,错误时返回“417 Expectation Failed”,“100-continue”
 From 用户的电子邮箱地址,为了显示搜索引擎等用户代理负责人的联系方式,“info@ha.com”
 Host 请求的资源所处的互联网主机名和端口号,必须包含在请求头中,“www.hh.com”
 If-Match 条件请求,只有当If-Match字段值与ETag匹配才会接受请求,否则返回“412 Precondition Failed”
 If-Modified-Since 若字段值早于资源的更新时间(Last-Modified),资源未更新,返回“304 Not Modified”
 If-None-Match 与If-Match相反
 If-Range 字段值和请求资源的ETag或时间一致时,作为范围请求处理,反之,返回全体资源
 If-Unmodified-Since 与If-Modified-Since作用相反
 Max-Forwards 以十进制整数形式指定可经过的服务器最大数目。服务器转发一次,减少1,当为0就不进行转发
 Proxy-Authorization 接收从代理服务器发来的认证质询时,发送此字段,告知服务器认证所需要的信息
 Range 只需获取部分资源的范围请求,“5001-10000”从5001字节到10000字节的资源。
 Referer 请求的原始资源的URI,也就是上一页
 TE 客户端能够处理响应的传输编码方式及相对优先级,还可指定Trailer字段分块传输编码的方式。“gzip,deflate;q=0.5”
User-Agent 创建请求的浏览器和用户代理名称等信息

HTTP应答头域:

 Accpet-Ranges 告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。“bytes”
 Age 源服务器在多久前创建了响应,字段值单位为秒
 ETag 客户端实体标识,一种可以将资源以字符串形式做唯一标识的方式
 Location 将响应接收方引导至某个与请求URI位置不同的资源,会配置3xx:Redirection的响应
 Proxy-Authenticate 由代理服务器所要求的认证信息发送给客户端
 Retry-After 告知客户端应该在多久(秒数或具体日期)之后再次发送请求,主要配合“503 Service Unavailable”或“3xx Redirect”。
 Server 当前服务器上安装的HTTP服务器应用程序的信息,包括版本号等。“Apache/2.2.6 (Unix) PHP/5.2.5”
 Vary 对缓存进行控制,设置“Accept-Language”,如果字段值相同,就从缓存返回响应。
 WWW-Authenticate HTTP访问认证,告知客户端适用于访问请求URI所指定资源的认证方案(Basic或Digest)和带参数提示的质询(challenge)

HTTP通用头域:

Cache-Control操作缓存的工作机制,多个指令用“,”分割,“private,max-age=0,no-cache”
Connection控制不再转发给代理的首部字段与管理持久连接,“keep-alive”
DateHTTP报文的日期和时间
PragemaHTTP1.1之前的遗留字段,作为向后兼容定义,只用在客户端发送的请求中。“no-cache”
Trailer说明在报文主体后记录了哪些首部字段,可应用在分块编码传输时。在报文最后写了重要信息
Transfer-Encoding传输报文主体时采用的编码方式,分块传输“chunked”
Upgrade检测HTTP协议及其他协议是否可使用更高版本进行通信
Via追踪客户端与服务器之间的请求和响应报文的传输路径,各个代理服务器会往Via添加自己的服务器信息
Warning告知用户一些与缓存相关问题的警告

HTTP实体头域:

 Allow 告知客户端能够支持Request-URI指定资源的所有HTTP方法,“GET,HEAD”。当不支持,会返回“405 Method Not Allowed”
 Content-Encoding 服务器对实体的主体部分选用的内容编码方式,在不丢失内容的前提下进行压缩。“gzip”
 Content-Language 实体主体使用的自然语言(中文或英文等)
 Content-Length 主体部分的大小(单位是byte)
 Content-Location 给出与报文主体部分相对应的URI,与Location不同
 Content-MD5 一串由MD5算法生成的值,目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达
 Content-Range 针对范围请求,作为响应返回的实体的哪个部分符合范围请求,单位为byte。“bytes 5001-10000/10000”
 Content-Type 实体主体内对象的媒体类型,与Accpet一样,字段值用type/subtype形式赋值。“text/html; charset=UTF-8”
 Expires 将资源失效的日期告知客户端。当首部字段Cache-Control有指定max-age指令时,优先处理max-age指令
 Last-Modified 指明资源最终修改时间,一般来说,这个值就是Request-URI指定资源被修改的时间

详细信息可以参考MDN的《HTTP Headers

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准,一种通知客户端其接收文件的多样性的机制,文件后缀名在网页上并没有明确的意义。

八、HTTPS协议

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)基于SSL的HTTP协议,HTTP的安全版。

使用端口43,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输和身份认证的网络协议。

1)HTTPS工作流程

2)SSL

SSL(Secure Sockets Layer)安全套接层,TLS(Transport Layer Security)传输层安全是其继任者。

SSL和TLS在传输层对网络连接进行加密。

SSL协议分为两层,SSL记录协议(SSL Record Protocol)和SSL握手协议(SSL Handshake Protocol)。

SSL记录协议建立在TCP之上,提供数据封装、压缩加密基本功能的支持。

SSL握手协议建立在SSL记录协议之上,在数据传输之前,通信双方进行身份认证、协商加密算法和交换加密秘钥等。

SSL工作分为两个阶段,服务器认证和用户认证。

SSL协议既用到了公钥加密(非对称加密)又用到了对称加密技术。

3)数据包

客户端与服务器之间的通信:

1.客户端发出请求(Client Hello)

2.服务器响应(Server Hello)

3)证书信息

3.密钥交换

4.应用层信息通信

用户可以发送通过TLS层使用RC4的写实例加密过的普通HTTP消息,也可以解密服务端RC4写实例发过来的消息。

此外,TLS层通过计算消息内容的HMAC_MD5哈希值来校验每一条消息是否被篡改。

参考资料:

Wireshark网络分析的艺术

Wireshark数据包分析实战详解

车小胖谈网络:MTU 与 MSS

MTU & MSS 详解记录

网络传输分片、MTU、MSS

理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)

wireshark抓包图解 TCP三次握手/四次挥手详解

TCP 的那些事儿(下)

TCP segment of a reassembled PDU

SSL/TLS协议运行机制的概述

如何通过Wireshark查看HTTPS、HTTP/2网络包(解码TLS、SSL)

转载于:https://www.cnblogs.com/strick/p/6262284.html

相关文章:

实现Java中的ArrayList

最近深受轮子哥影响,觉得造一些轮子应该会对自己的技术功底有一定的帮助,就决定先从简单的容器开始实现。废话不多说,就先实现一个Java中的ArrayList。 ArrayList是我们在Java中使用非常多的一个类,它是顺序表的数组实现&#xff…

6-flutter 状态管理

1 StatelessWidget 不需要状态改变的widget,它没有要管理的内部状态。 Text,CircleAvator 都是其子类 其传递的参数别final 修饰,不可变的 无状态的widget build 方法在以下三种情况下进行调用 当widget 插入到数中去当widget 父级更改配置的时候当…

大二上学数据结构和操作系统_毕业后的工作比上学要重要得多。 这是数据。...

大二上学数据结构和操作系统by Aline Lerner通过艾琳勒纳(Aline Lerner) 毕业后的工作比上学要重要得多。 这是数据。 (What you do after you graduate matters way more than where you went to school. Here’s the data.) The first blog post I published that got any r…

关于C#中编译器保证变量必须初始化规则猜想

现在两种情况: 第一种情况: using System; namespace Wrox {public class Program{static void Main(string[] args){int index; if(true){ index 100; } Console.WriteLine(index); Cons…

Bootstrap table表格

Bootstrap table 使用类 Class"table" 既可让table美化样式 table 相关的Class 隔行换色 : table-striped 鼠标悬停效果: table-hover 表格的边框 : table-bordered 垂直居中 : vertical-align 表头颜色:c…

flutter报错Could not connect to lockdownd, error code -

关于 flutter 报错信息解决方案 第一步: cmdshiftg 前往 /var/db 文件夹,找到lockdown文件夹,修改读写权限 第二步 : 打开命令行,依次执行 brew update brew uninstall --ignore-dependencies libimobiledevice brew uninstall…

k8s aws 部署_如何在短短30分钟内使用CircleCI设置到AWS S3的持续部署

k8s aws 部署by Adam Watt通过亚当瓦特 如何在短短30分钟内使用CircleCI设置到AWS S3的持续部署 (How to setup Continuous Deployment to AWS S3 using CircleCI in just 30 minutes) Continuous Deployment might seem complicated at first, but don’t be intimidated. In…

SharePoint 2010 单点登录

SharePoint2010单点登录 1.进入管理中心》应用程序管理 2.找到 Secure Store Service 应用程序代理 3.然后就是新建了 5.输入网站集管理员 6.这个时候SharePoint就知道你需要给OA这个系统做单点登录了。 7.下一步就是我们要把我们进OA系统的帐号密码告诉SharePoint&#xff0c…

Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54894451 本文出自【赵彦军的博客】 InputStream |__FilterInputStream|__BufferedInputStream 首先抛出一个…

7-flutter Navigator 和Route

Route 和 Navigator 用于页面之间的跳转 一 Navigator 的 push 和 pop 用于页面之间的跳转 创建MaterialApp时可以指定routes参数,该参数是一个映射路由名称和构造器的Map 跳转的时候 使用 push 跳回的时候使用 pop import package:flutter/cupertino.dart; im…

小规模网络数据公开数据_大规模的在线公开课程曾经是100%免费的。 但是他们没有那样做。...

小规模网络数据公开数据I took one of the first Massive Open Online Courses (MOOCs) in 2011. Back then, everything was 100% free: the videos, the assignments, and the certificates. But in 2017, you can’t find this sort of free learning experience anymore.我…

swift -charts框架雷达图

参考资料 import UIKit import Chartsclass ViewController: UIViewController {let activities ["力量", "敏捷", "生命", "智力", "魔法"]override func viewDidLoad() {super.viewDidLoad()// Do any additional setup…

vector容器总结.xml

1 清空所有元素m_itemVector.clear(); 2 遍历vector<ITEM_CHECK>::iterator iterm_itemVector.begin(); for(i0;iter!m_itemVector.end();iter,i) { if(iter->flag-1) { break; } iter->flag1; } vector<ITEM_CHECK>::iterator iterm_itemVector.b…

Syncthing源码解析 - 第三方库

1&#xff0c;AudriusButkevicius/cli 网址&#xff1a;https://github.com/AudriusButkevicius/cli 2&#xff0c;bkaradzic/go-lz4 网址&#xff1a;https://github.com/bkaradzic/go-lz4 3&#xff0c;calmh 备注&#xff1a;这位是Syncthing项目创立者和最主要的开发者&…

安全工程师2017年真题_以下是2017年全球软件工程师的平均薪水

安全工程师2017年真题And here are those same salaries adjusted to San Francisco’s cost of living:以下是根据旧金山的生活费用调整后的相同工资&#xff1a; As you can see, cost of living is an important consideration. Also, you don’t need to move to San Fran…

测试思想 什么是软件测试(摘录)

什么是软件测试(摘录) by:授客 QQ&#xff1a;1033553122 IEEE 标准的定义:使用人工或自动的手段来运行或测定某个系统的过程&#xff0c;其目的在于检验;它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。对软件测试还有一些不同的定义。 G.J.Myers给出的定义:“程…

8-flutter 异步和线程

线程和异步的UI 1 异步的使用 Dart 有一个单线程执行模型&#xff0c;支持Isolate&#xff08;一种在另外一种线程运行dart的方法&#xff09;,一个事件循环和异步编程。 可以使用async / await 来做网络请求不会挂起UI 使用http 导入 import ‘dart:io’; import ‘dart:c…

前端页面紫红色_谷歌正在开发一种神秘的新型移动操作系统,称为紫红色

前端页面紫红色Google seems to be building a replacement for Android called Fuchsia. Yesterday, they revealed what their new Armadillo user interface looks like (see photo above, courtesy of Ars Technica).谷歌似乎正在建立一个名为Fuchsia的 Android替代产品。 …

iOS UIButton 文字图片上下左右布局

例如文字在左 图片在右,iOS 9 之后一句话搞定 backBtn.semanticContentAttribute UISemanticContentAttributeForceRightToLeft;按钮标题居左实现 dateBtn.contentHorizontalAlignment UIControlContentHorizontalAlignmentLeft; dateBtn.contentEdgeInsets UIEdgeInsetsMak…

linux xampp eclipse xdebug 无法进入断点

一、xampp 版本 1.8.3-5 xampp安装后会自动集成xdebug,目录一般为 /opt/lampp/lib/php/extensions/***-debug-***目录 关于php 与php.ini路径 php程序路径为&#xff1a;/opt/lampp/bin/ php.ini配置文件路径为&#xff1a;/opt/lampp/etc/ 1、配置文件一般在/opt/lampp/etc/ph…

sliva数据库简介--转载

sliva rRNA数据库&#xff08;http://www.arb-silva.de/&#xff09;用来检查和比对RNA序列&#xff0c;既可以针对16S/18S,SSU&#xff0c;也可以针对23S/28S, LSU&#xff0c;包括了Bacteria, Archaea and Eukarya。同时也是ARB的官方指定数据库。 LSU: Large subunit (23S/2…

haproxy ssl_我们如何微调HAProxy以实现2,000,000个并发SSL连接

haproxy sslby Sachin Malhotra由Sachin Malhotra 我们如何微调HAProxy以实现2,000,000个并发SSL连接 (How we fine-tuned HAProxy to achieve 2,000,000 concurrent SSL connections) If you look at the above screenshot closely, you’ll find two important pieces of in…

OC文件操作(1)

1.文件的浅度遍历与深度遍历&#xff1a; //NSFileManager * fm [[NSFileManager alloc]init];//创建文件管理器 //第一步创建一个文件管理器 NSError * error nil; //显示路径下的内容,作用类似于ls -a指令 //返回值是把目录下的内容放到NSArray中 //浅度遍历 NSFileManager …

10-flutter 使用http包请求和网络指示器

使用http package 进行网络请求操作 1 安装步骤 Step1 在pubspec.yaml 文件中添加依赖 dependencies:http: ^0.12.01Step2 flutter packages getStep3 导入头文件 import ‘package:http/http.dart’ as http; 2 使用 var responseBody;http.Response response await http.…

使用nat方式解决虚拟机联网问题

本文全文参考&#xff1a;http://jingyan.baidu.com/album/4e5b3e1957979d91901e24f1.html?picindex1&#xff0c;谢谢 对于很多的linux初学者来说&#xff0c;最开始学习linux时通常是在虚拟机上进行的&#xff0c;然而对于新手来说虚拟机联网会对他们来说是比较困难的。…

老年痴呆 数字化_设计老年人愉快数字体验的5条原则

老年痴呆 数字化by Kaye Mao毛凯(Kaye Mao) 设计老年人愉快数字体验的5条原则 (5 Principles for Designing Delightful Digital Experiences for Seniors) When we got my grandfather his first smart phone, he was thrilled. He had heard all about the wonders of video…

hdu 3664 1~n排列(aii ) 为k个数

http://acm.hdu.edu.cn/showproblem.php?pid3664 求1~n的排列个数&#xff0c;使得逆序数&#xff08;ai>i ) 为给定的k. dp[i][j]表示前1~i的排列中&#xff0c;有j个数是逆序数的个数. #include <cstdio> #include <cstdlib> #include <cmath> #includ…

四边参数值的设定

border&#xff0c;margin&#xff0c;padding 拿border举例 border&#xff1a;上&#xff0c;右&#xff0c;下&#xff0c;左。 border&#xff1a;上下&#xff0c;左右。 border&#xff1a;上下左右。 border&#xff1a;上&#xff0c;左右&#xff0c;下。转载于:https…

11-flutter事件监听

事件监听 1 本身支持事件检测&#xff0c;就可以直接使用onpress body:Center(child: RaisedButton(child: Text("Click"),onPressed: (){print("我被Click了");}),),2 如果本身不支持事件的检测&#xff0c; 使用 GestureDetector 添加一个点击事件 hom…

react前端开发_是的,React正在接管前端开发。 问题是为什么。

react前端开发by Samer Buna通过Samer Buna 是的&#xff0c;React正在接管前端开发。 问题是为什么。 (Yes, React is taking over front-end development. The question is why.) Update: This article is now part of my book “React.js Beyond The Basics”.更新&#xf…