网络协议学习笔记 二 tcpdump windump (BY 冷家锋)

2023-11-13

网络协议学习笔记

作者:冷家锋,刘婷婷

时间:2008-4-3

说明:欢迎转载,无须注明出处。水平有限,译者不保证译文的正确和准确,如因看了本译文而对看官的学习有误导,与译者无关。

学习网络和操作系统也有段时间了,总感觉无所进步,打算认真从tcpdump学起,来到www.winpcap.org网站,看到几篇文章,看了下,感觉自己的英文还对付,遂起翻译之意,也算是对自己一个交代;-)。网上搜了一下,似乎没有中文译文,可能是译者孤陋寡闻。

浏览了winpcap网站,感觉自己以前所学真是沧海一粟,太过浅薄,翻译几篇以作为开始。希望自己能坚持!!!

      

文章标题:Studying Normal Network Traffic, Part One

作者:Karen Kent Frederick2001-01-29

原文链接:http://www.securityfocus.com/infocus/1222

       本文是常规网络会话研究的第2篇。正如作者在第一篇的谈到的:很多网络入侵检测人员将注意力集中于可疑封包的特征,比如非法TCP标记(flag,网上搜了下,翻译为标记的较多,译者不知如何译更准确)组合或者保留(reservedIP地址。其实,熟悉常规的网络会话是什么样的同样重要。研究网络会话例程是学习TCP/IP和您自己的系统环境的重要方法。本系列的第一篇介绍了如何用WinDump捕获封包并对封包进行检测,然后带着读者看了一些简单的TCP/IP会话的例子。本文将介绍FTP会话。从标准的会话流的角度看,FTP会话与大多数协议相比更为复杂。请读者注意,要理解本文的内容,您应该具备TCP/IP基础,并且熟悉WinDumptcpdump日志格式,这一点本系列的第一篇进行了介绍。

      

<标准FTP会话>

       FTP因其建立连接的方式而显得非常有趣。为了检测常规FTP会话,我们将在mypc.xx.yy.zz和一台远程FTP服务器(本例中是ftp.microsoft.com--IP:207.46.133.140)进行FTP会话。

       会话开始,FTP会话与第一篇中分析的SSH会话很相似。常规地,FTP会话的第一步是发送一个获取默认网关的MAC地址的ARP请求。但是,本例中,该MAC地址存在与mypcARP缓存中,因此,不需要发送ARP请求。结果,我们在日志中首先看到的信息是DNS查询,该查询请求获得ftp.microsoft.comIP地址,紧接着是DNS应答。注意:和我们预期的一样,这些UDP封包中,客户端使用高端口,服务器使用53端口。

         13:50:46.490130 mypc.xx.yy.zz.3170 > dnsserver.xx.yy.zz.53:  1+ A? ftp.microsoft.com. (35)
13:50:46.500269 dnsserver.xx.yy.zz.53 > mypc.xx.yy.zz.3170:  1 q: ftp.microsoft.com. 1/4/4
ftp.microsoft.com. A 207.46.133.140 (215)

       既然mypc已经获得了服务器的IP地址,207.46.133.140,接下来就是从一个高端口发起到ftp.microsoft.comFTP端口21TCP3步握手。

13:50:46.564494 mypc.xx.yy.zz.3171 > 207.46.133.140.21: S 87666930:87666930(0) 
win 65535  (DF)
13:50:46.671920 207.46.133.140.21 > mypc.xx.yy.zz.3171: S 3058770520:3058770520(0) 
ack 87666931 win 17520  (DF)
13:50:46.672155 mypc.xx.yy.zz.3171 > 207.46.133.140.21: . 87666931:87666931(0) 
ack 3058770521 win 65535 (DF)

       3步握手过后,FTP客户端和服务器开始交换信息。然后笔者收到一条消息:笔者已经连接到ftp.microsoft.com,并要求笔者提供用户名。笔者敲入anonymous,然后笔者被要求输入一个email地址作为密码。笔者敲入email地址之后,获得了FTP提示符。该信息交换其实是客户端和服务器之间的一系列PUSH/ACKACK封包。下面是这些交换封包的一个例子。注意:这些封包使用mypc3171端口和ftp.microsoft.com 21端口:

13:50:46.779273 207.46.133.140.21 > mypc.xx.yy.zz.3171: P 3058770521:3058770576(55) 
ack 87666931 win 17520 (DF)
13:50:46.896881 mypc.xx.yy.zz.3171 > 207.46.133.140.21: . 87666931:87666931(0) 
ack 3058770576 win 65480 (DF)
13:50:48.282313 mypc.xx.yy.zz.3171 > 207.46.133.140.21: P 87666931:87666947(16) 
ack 3058770576 win 65480 (DF)
13:50:48.388962 207.46.133.140.21 > mypc.xx.yy.zz.3171: P 3058770576:3058770648(72) 
ack 87666947 win 17504 (DF)
13:50:48.495939 mypc.xx.yy.zz.3171 > 207.46.133.140.21: . 87666947:87666947(0) 
ack 3058770648 win 65408 (DF)

       到目前为止,FTP会话模式与SSH会话非常相似。然而FTP会话有一个明显的不同之处。FTP会话使用初始连接作为FTP会话的控制链路。该控制链路把客户端的命令发送到服务器并把服务器的应答传回到客户端。实际数据,比如目录列表,文件上传,下载不是通过该连接传送的。本例中,该控制链路是客户端的3171端口和FTP服务器的21端口。当用户下载文件或者请求目录列表时,数据通过一个单独的TCP连接进行发送,该连接专门为下载或目录列表请求创建,并且,一旦该请求结束,这个连接立即拆除。

       当用户敲入”ls”命令以获取目录列表时,有几个步骤发生。服务器为了生成一个到客户端的数据连接,需要知道与客户端的哪一个端口通讯。第2行显示了服务器的应答,告诉客户端IP地址和端口号是可接受的。第3行是FTP客户端软件发送到服务器的命令,请求文件列表。最后,第4行,服务器通知客户端它正在产生数据连接。

13:50:53.501031 mypc.xx.yy.zz.3171 > 207.46.133.140.21: P 87666966:87666994(28) 
ack 3058770765 win 65291 (DF)
13:50:53.607175 207.46.133.140.21 > mypc.xx.yy.zz.3171: P 3058770765:3058770795(30) 
ack 87666994 win 17457 (DF)
13:50:53.632708 mypc.xx.yy.zz.3171 > 207.46.133.140.21: P 87666994:87667000(6) 
ack 3058770795 win 65261 (DF)
13:50:53.737852 207.46.133.140.21 > mypc.xx.yy.zz.3171: P 3058770795:3058770850(55) 

ack 87667000 win 17451 (DF)

       服务器为了传输数据(本例中是目录列表)到客户段,生成了一个从服务器的20端口到由客户端指定的端口(本例中为3172)的数据连接。此时3步握手产生,然后服务器发送一个PUSH/ACK封包到客户端。该封包包含文件列表,因为该封包非常小,因此可以包含在一个封包内。该封包的日志记录显示有164,表明在该封包中传输了164字节的数据。

13:50:53.738024 207.46.133.140.20 > mypc.xx.yy.zz.3172: S 3061133541:3061133541(0) 
win 16384  (DF)
13:50:53.738200 mypc.xx.yy.zz.3172 > 207.46.133.140.20: S 87674104:87674104(0) 
ack 3061133542 win 65535  (DF)
13:50:53.844704 207.46.133.140.20 > mypc.xx.yy.zz.3172: . 3061133542:3061133542(0) 
ack 87674105 win 17520 (DF)
13:50:53.850833 207.46.133.140.20 > mypc.xx.yy.zz.3172: P 3061133542:3061133706(164) 
ack 87674105 win 17520 (DF)

       此时,有两个独立的连接:

       。客户端3171端口和服务器的21端口之间的控制连接,

       。客户端3172端口和服务器的20端口之间的数据连接。

       一旦服务器完成了目录列表的传送,它就非常幽雅的执行该连接的拆除操作,该操作通过发送一个FIN/ACK封包来完成。要注意的是,服务器仅关闭其20端口的数据连接,而不是其21端口的控制连接。当数据连接正在拆除时,我们可以看到FTP会话仍然存在与控制连接。下面的第5个记录,显示了通过控制连接传输了24个字节的数据,表明服务器向用户发送了一条待显示消息。此时,服务器向客户端发送“226 Transfer complete”,表明目录列表已经成功传送至客户端。

 13:50:53.850981 207.46.133.140.20 > mypc.xx.yy.zz.3172: F 3061133706:3061133706(0) 
ack 87674105 win 17520 (DF)
13:50:53.851068 mypc.xx.yy.zz.3172 > 207.46.133.140.20: . 87674105:87674105(0) 
ack 3061133707 win 65371 (DF)
13:50:53.895937 mypc.xx.yy.zz.3171 > 207.46.133.140.21: . 87667000:87667000(0) 
ack 3058770850 win 65206 (DF)
13:50:53.903415 mypc.xx.yy.zz.3172 > 207.46.133.140.20: F 87674105:87674105(0) 
ack 3061133707 win 65371(DF)
13:50:54.002060 207.46.133.140.21 > mypc.xx.yy.zz.3171: P 3058770850:3058770874(24) 
ack 87667000 win 17451 (DF)
13:50:54.009333 207.46.133.140.20 > mypc.xx.yy.zz.3172: . 3061133707:3061133707(0) 
ack 87674106 win 17520 (DF)
13:50:54.196818 mypc.xx.yy.zz.3171 > 207.46.133.140.21: . 87667000:87667000(0) 
ack 3058770874 win 65182 (DF)

       如果笔者从服务器下载文件,我们将看到类似的事件发生。服务器从端口20向客户端的一个不同于3172的高端口发起一个新的数据连接,然后是3步握手过程。数据将通过该连接传输,一旦传输结束,该连接即被拆除。

       在一个FTP会话期间,数秒内可能会建立好几个连接。每次建立一个数据连接,客户端都会使用一个不同的端口。如果您只看会话的一部分,似乎这是一次端口扫描,尤其是当客户端分配连续的端口号时。您应该对会话进行更多的观察,以判定这是一次端口扫描还是仅仅是更多的FTP数据连接。

      

<Passive FTP会话>

       FTP协议与其他协议的不同之处在于,由服务器发起到客户端的数据连接,而不是由客户端发起所有连接。由于防火墙和封包过滤程序的存在,FTP会话可能会遇到问题,因为FTP的数据连接是由服务器发起的。为了避免上述问题,用户可以利用passive FTP,而不是标准FTP

       Passive FTP和标准FTP采用系统的步骤:客户端在自己的高端口和服务器的21端口之间建立一个控制连接。然后,当需要打开一个数据连接说,服务器向客户端发送一个可用的高端口号。然后,客户端在其高端口中选择一个与服务器发送过来的高端口形成连接。因此,如果您使用passive FTP,端口20是不会用到的。此时,所有的数据是在两个高端口间传送的。

       下面的例子是关于passive FTP的工作原理的。该会话由一台OpenBSD 2.8发起,用tcpdump捕获。OpenBSD的客户软件默认采用passive FTP

       首先,passive FTP与常规FTP类似,由客户端从其高端口向FTP服务器的21端口发起一个TCP连接。请注意:因为我们使用OpenBSD代替了Windows 98,用tcpdump代替了Windump,所以,日志记录与上一个记录看起来稍有区别。但是,二者的会话模式是完全相同的。

15:57:28.005993 bsdpc.xx.yy.zz.28348 > 207.46.133.140.21: S 157025335:157025335(0) 
win 16384 
15:57:28.099136 207.46.133.140.21 > bsdpc.xx.yy.zz.28348: S 1286994806:1286994806(0) 
ack 157025336 win 17520  (DF)
15:57:28.099193 bsdpc.xx.yy.zz.28348 > 207.46.133.140.21: . 
ack 1286994807 win 17376
15:57:28.193361 207.46.133.140.21 > bsdpc.xx.yy.zz.28348: P 1286994807:1286994862(55) 
ack 157025336 win 17520 (DF)
15:57:28.193413 bsdpc.xx.yy.zz.28348 > 207.46.133.140.21: . ack 1286994862 win 17376
 
(N.B.: Several additional PUSH/ACK and ACK packets have been omitted.)

       然后,与标准FTP会话过程类似,笔者在FTP客户端敲入ls以获得文件列表。在下面显示的第一个封包中,笔者的FTP客户端通知服务器使用passive FTP。第二个封包中包含了服务器对这个请求的应答,应答内容包含服务器的IP地址和服务器对数据连接请求的而分配的端口号。第三个封包中,客户端表明已收到端口信息。

15:57:36.243722 bsdpc.xx.yy.zz.28348 > 207.46.133.140.21: P 157025383:157025389(6) 
ack 1286995115 win 17376
15:57:36.342188 207.46.133.140.21 > bsdpc.xx.yy.zz.28348: P 1286995115:1286995166(51) 
ack 157025389 win 17467 (DF)
15:57:36.342213 bsdpc.xx.yy.zz.28348 > 207.46.133.140.21: . 
ack 1286995166 win 17325

       请注意:客户端知道服务器使用了哪个端口,客户端从另一个高端口向服务器发起了一个TCP连接。本例中,客户端使用端口24626,服务器使用端口36683步握手完成后我们可以看到在由服务器的21端口和客户端的28348端口建立的控制连接中,有信息传输。

15:57:36.342370 bsdpc.xx.yy.zz.24626 > 207.46.133.140.3668: S 157871686:157871686(0) 
win 16384 
15:57:36.440039 207.46.133.140.3668 > bsdpc.xx.yy.zz.24626: S 1292391804:1292391804(0) 
ack 157871687 win 17520  (DF)
15:57:36.440076 bsdpc.xx.yy.zz.24626 > 207.46.133.140.3668: . 
ack 1292391805 win 17376
15:57:36.440167 bsdpc.xx.yy.zz.28348 > 207.46.133.140.21: P 157025389:157025395(6) 
ack 1286995166 win 17376
15:57:36.542608 207.46.133.140.21 > bsdpc.xx.yy.zz.28348: P 1286995166:1286995220(54) 
ack 157025395 win 17461 (DF)
15:57:36.542638 bsdpc.xx.yy.zz.28348 > 207.46.133.140.21: . ack 1286995220 win 17322

       请注意:此时数据连接已经建立,可以进行文件列表的传输。如果您查看本段记录(本段记录以时间戳排序),您会发现在数据传送之前(第三行),服务器似乎正在拆除连接(第一行)。然后,如果您查看序列号会发现,这些封包不是按顺序接收的。0字节的数据是在含有1167字节的数据之后发送的,但是0字节的数据最先收到。如果您需要分析类似的日志记录,将这些封包按时间戳排序是有效的,但是您应该注意其顺序号。

15:57:36.547340 207.46.133.140.3668 > bsdpc.xx.yy.zz.24626: F 1292392972:1292392972(0) 
ack 157871687 win 17520 (DF)
15:57:36.547367 bsdpc.xx.yy.zz.24626 > 207.46.133.140.3668: . 
ack 1292391805 win 17376
15:57:36.549363 207.46.133.140.3668 > bsdpc.xx.yy.zz.24626: P 1292391805:1292392972(1167) 
ack 157871687 win 17520 (DF)
15:57:36.549396 bsdpc.xx.yy.zz.24626 > 207.46.133.140.3668: . 
ack 1292392973 win 16209
15:57:36.551374 bsdpc.xx.yy.zz.24626 > 207.46.133.140.3668: F 157871687:157871687(0) 
ack 1292392973 win 17376
15:57:36.635184 207.46.133.140.21 > bsdpc.xx.yy.zz.28348: P 1286995220:1286995244(24) 
ack 157025395 win 17461 (DF)
15:57:36.635211 bsdpc.xx.yy.zz.28348 > 207.46.133.140.21: . 
ack 1286995244 win 17376
15:57:36.647798 207.46.133.140.3668 > bsdpc.xx.yy.zz.24626: . 
ack 157871688 win 17520 (DF)

      

<总结>

       我们与FTP流进行了一次亲密接触。FTP使用两种不同的连接类型:控制连接和数据连接。控制连接用于从客户端向服务器发送命令,并从服务端接收命令的应答。控制连接由客户端发起。在标准FTP中,所有的数据连接由服务端发起。而在passive FTP中,所有的数据连接由客户端发起。

       笔者怂恿您亲自进行FTP会话的封包捕获(当然,您需要有正确的授权)。本系列的下一篇文章将讨论一些正常封包的附加特征,比如TCP选项。

 

 

 

 

 

 

 

 

 

 

 

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络协议学习笔记 二 tcpdump windump (BY 冷家锋) 的相关文章

  • 如何通过 UNIX mailx 命令发送电子邮件?

    如何通过 UNIX 发送电子邮件mailx命令 一个例子 echo something mailx s subject email protected cdn cgi l email protection 发送附件 uuencode fil
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 如何通过电子邮件发送 Excel 文件?

    我有一个 excel 文件 Excel 2003 xls 格式 我想用 c 通过电子邮件发送它 我的代码成功发送它 但是当我尝试打开响应文件时 它似乎编码错误 例如 这里是响应文件名 utf 8 B RWxzesOhbW9sw6FzXzIw
  • 如何在 Jenkins 中设置发件人地址?

    我正在将邮件从 Jenkins 发送到内部匿名 SMTP 中继 然后 该中继通过端口 587 上的 TLS 安全地发送邮件进行在线交换 传输工作正常 问题是 Microsoft 要求发件人地址与身份验证凭据登录名匹配 该登录名与帐户电子邮件
  • ADB TCPIP 连接问题

    我有两台 Galaxy S3 其中一个已扎根 另一个则未扎根 因此 当我尝试通过本地网络连接它们时 计算机可以看到已root的计算机 但是正常的就卡在tcpip这一步了 所以 我写 adb tcpip 5555 It says restar
  • Java特殊字符替换

    我有一段文字 Csukl si roham gy t rheti a sv deket annyit emlegetikmostans g ism t a sv d modellt Magyarorsz gon 在原始文本中根本没有换行符
  • 如何使用默认电子邮件客户端发送电子邮件?

    我想使用系统的默认电子邮件客户端 雷鸟 outlook 等 从 net windows 窗体应用程序发送电子邮件 我想预设主题和正文 我认为有一种方法可以通过向 Windows 资源管理器发送类似的内容来做到这一点 mailto 电子邮件受
  • Apache HttpClient TCP Keep-Alive(套接字保持活动)

    我的 http 请求需要太多时间才能被服务器处理 大约 5 分钟 由于连接闲置 5 分钟 代理服务器将关闭连接 我正在尝试在 Apache DefaultHttpClient 中使用 TCP Keep Alive 来使连接长时间处于活动状态
  • 通过 bash 从文件中检索电子邮件主题

    我有一个 shell 脚本 它将文件从服务器邮件文件夹下载到 NAS 设备 以便客户端拥有本地备份的副本 文件保存为11469448248 H15587P19346 smtp x14 eu 2 S文件 我已将扩展名更改为标准 eml 格式
  • Java 正则表达式 电子邮件

    首先 我知道不建议使用正则表达式发送电子邮件 但我必须对此进行测试 我有这个正则表达式 b A Z0 9 A Z0 9 A Z 2 4 b 在Java中 我是这样做的 Pattern p Pattern compile b A Z0 9 A
  • GMAIL:如果我知道其 ID,如何在新窗口中打开现有电子邮件?

    简而言之 如果我知道新窗口中的电子邮件 ID 如何在 Gmail 中打开电子邮件 问候 我从 GMAIL API 获取所需电子邮件的 ID 我希望它在单独的窗口中打开 例如 通过单击我的附加组件 我知道的 使用 JavaScript 代码做
  • 发送邮件时PEAR邮件验证失败

    由于我发现 PHP 中内置的邮件功能存在安全漏洞 因此我尝试使用 PEAR 我已经在本地主机 WAMP 服务器 2 2 上安装并进行了必要的配置 但是 每次我尝试发送电子邮件时 都会显示以下消息 error authentication f
  • Eclipse 中的 Java 简单电子邮件程序

    我想制作一个简单的程序 您可以从其中发送电子邮件命令行 我找到了这个教程 http www tutorialspoint com java java sending email htm http www tutorialspoint com
  • C#生成的csv文件通过电子邮件发送嵌入到Lotus Note中电子邮件的底部

    我遇到了一个奇怪的问题 即使用 NET SmtpClient 通过电子邮件发送的 CSV 附件出现在电子邮件底部 而不是 Lotus Note 中的附件 我只是不知道如何解决这个问题 而且我无法访问客户端计算机 这使得调试非常困难 我可以采
  • 使用 javascript 通过 google api 发送邮件失败

    我正在尝试使用 JavaScript 通过 Google API 发送电子邮件 我的问题是 当我尝试发送不带附件的简单邮件时 出现以下错误 原始 RFC822 有效负载消息字符串或通过 upload 需要 URL 上传消息 My code
  • 使用 InputStream 通过 TCP 套接字接收多个图像

    每次我从相机捕获图像时 我试图将多个图像自动从我的 Android 手机一张一张地发送到服务器 PC 问题是read 函数仅在第一次时阻塞 因此 从技术上讲 只有一张图像被接收并完美显示 但在那之后当is read 回报 1 该功能不阻塞
  • C#:如何在 Socket.BeginReceive 回调之前终止套接字?

    我有一个接收来自客户端的连接请求的服务器 该服务器使用异步Socket BeginReceive and Socket EndReceive方法 该代码与找到的代码非常相似here http msdn microsoft com en us
  • django 根据 UserProfile.language() 字段数据发送本地化电子邮件

    在我的优惠网站中 如果优惠满足某些要求 模型中指定的过滤器 用户可以设置电子邮件警报 因此 当用户 A 添加报价时 post save 信号将发送到 celery 并检查是否应用了用户警报过滤器 如果有 则发送电子邮件 问题是我不知道如何安
  • 使用 TCP 时是否需要使用校验和来保护我的消息?

    使用 TCP 作为网络协议 在通过线路发送消息之前 我会为每条消息的大小 以及可能的校验和 添加前缀 我想知道 计算和传输消息的校验和是否有意义 以确保消息将被不变地传递 如果以及何时传递 例如因为一些网络错误 目前 我在发送消息本身之前发
  • iPhone 标签栏上的未读计数

    在 Cocoa Touch 上实现 TabBar 上图标的未读计数的最佳方法是什么 我想模仿 SMS 或邮件应用程序的行为 向我的应用程序的用户显示未读消息计数 并使用包含数字的红点 您正在寻找的属性称为徽章 您可以通过执行以下操作来设置它

随机推荐

  • python-16进制字符串和16进制数字转换

    0xa1 0x09 0x1c 0xef gt a1 09 1c ef b xa1 x09 x1c xef hex a1091cef a1 09 1c ef gt 0xa1 0x09 0x1c 0xef bytes fromhex a1091
  • 使用@Id时主键生成策略:TABLE、SEQUENCE、IDENTITY、AUTO

    主键生成策略 GenerationType TABLE GenerationType SEQUENCE GenerationType IDENTITY GenerationType AUTO TABLE 使用一个特定的数据库表格来保存主键
  • 《UML用户指南第二版》再次温读笔记(一)(downmoon)

    前言 最近 花点时间重读 也不知道是第几遍了 UML用户指南第二版 这本书 感觉虽然对WEB程序开发而言 UML的应用是一个极大的挑战 然而 其中蕴含的基本原理和指导性却是历久弥新 耐人回味 在此 特地摘录了部分让邀月留下印象的章节 以作备
  • eclipse里打开图片文件乱码解决方案

    从eclipse中打开工程文件下的图片文件显示乱码 原因是你电脑系统上没有设置图片的默认打开方式 或者是图片的默认打开方式与eclipse不兼容
  • 原始值和引用值

    ECMAScript 变量可以包含两种不同类型的数据 原始值和引用值 原始值就是简单数据类型 引用值则是由多个值构成的对象 原始值 引用值 原始值包括 Undefined Null Boolean Number String Symbol和
  • 【GAN 04】可解释性GAN

    本文是对http www seeprettyface com research notes html的学习笔记 不想让GANs随机生成图片 希望通过控制输入的参数去生成特定的图片 例如 在手写数字图片的生成中 希望通过输入 控制数字 高度以
  • Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.E

    前段时间做了个将Txt中数据导出到Excel中的C 小应用程序 一直都运行很好的 今天突然有同事安装时 报如下错 Exception Text System InvalidCastException Unable to cast COM o
  • android横竖屏切换、键盘推出状态改变的处理

    背景介绍 在编写android小应用的时候 碰到了这样的一个问题 当推开手机的实体键盘时 屏幕由竖屏转换为横屏 此时应用程序的显示界面 Activity 就会被销毁了 这个让人比较郁闷 如何才能让这个activity不被销毁呢 背景分割线
  • 【VUE3】ElementUI--el-date-picker下拉控件样式修改(高亮显示设置)

    ElementUI el date picker下拉控件样式修改 一些废话 事发背景 实现效果 实现思路 总结和完整代码 参考资料 一些废话 默默做前端 分享一些自己在项目需求实现中遇到的奇妙问题 主要是网上搜索不到解决办法自己解决后的总结
  • cell基础概念

    1 spare cell 备用cell 共流片时进行function eco和metal eco使用 使用方法 add spare cells add spare cells cell name spare1 lib cell AND2 O
  • Unity 按键输入系统(一)

    这段时间制作了游戏内的操作系统 主要制作的原因是 在游戏内很多按键是公用的 但是不同位置的处理逻辑不同 比如在最外层界面上 可以使用ESC打开菜单 但是在二级界面里 使用ESC是返回上个界面 如果要使用判断制作的话 会产生很强的耦合性 要在
  • (环境四)python安装pymssql

    1 利用pip安装 用pip安装whl文件 在cmd中输入 pip install pymssql 2 1 3 cp36 cp36m win32 whl 2 安装失败可手动下载 网址 https www lfd uci edu gohlke
  • 如何挑选自媒体平台进行创作?这3个关键需要把握

    应该如何挑选平台进行创作 在这里 介绍两个值得长期坚持的平台 及主要变现方式 1 头条号 阅读量变现 发布文章时 可根据阅读量获取对应广告分成 付费专栏 当账号获取图文原创收益后就能开启付费专栏 用户购买后即可获得收入 签约作者 成为平台签
  • aptitude versus apt-get

    Important UpdateApparently the new version of apt get in Edgy Eft Ubuntu 6 10 has a function that allows you to remove u
  • python作业记录1_字典运用的实例

    帮朋友做了几个作业题目 记录一下 一 某人到超市购买了以下物品 先需要对货物金额进行统计 清单如下图所示 牛奶 65 面包 15 可乐 39 饼干 45 糖果 24 水果 35 8 要求 1 使用字典保存以上数据 2 可乐的金额统计出错 请
  • GNU make 基礎知識點梳理 with tangible examples(01-st 記)

    1 作爲基礎項目的一個示例
  • Linux常见的工具有哪些?

    在Linux系统中 有很多实用的工具和软件可拿来即用 即方便又可以释放双手 节省时间 更是每个运维工程师必须掌握的技能之一 那么Linux常见的工具有哪些 具体请看下文 1 文本编辑器 Vim 一款功能强大的文本编辑器 Emacs 另一款广
  • Python工程师必看的面试问题与解答(中)

    16 在Python中什么是迭代器 在Python中 迭代器用于迭代一组元素 如列表之类的容器 17 什么是Python中的单元测试 Python中的单元测试框架称为unittest 它支持共享设置 自动化测试 测试关闭代码 将测试聚合到集
  • https单向认证和双向认证区别

    关于证书 1 每个人都可以使用一些证书生成工具为自己的https站点生成证书 比如jdk的keytool 大家称它为 自签名证书 但是自己生成的证书是不被互联网承认的 所以浏览器会报安全提示 要求你手动安装证书 只有通过权威的CA机构付费获
  • 网络协议学习笔记 二 tcpdump windump (BY 冷家锋)

    网络协议学习笔记二 作者 冷家锋 刘婷婷 时间 2008 4 3 说明 欢迎转载 无须注明出处 水平有限 译者不保证译文的正确和准确 如因看了本译文而对看官的学习有误导 与译者无关 学习网络和操作系统也有段时间了 总感觉无所进步 打算认真从