在本教程中,我们将学习如何使用 JS 进行AJAX调用。 1.AJAX 术语AJAX 表示 异步的 JavaScript 和 XML。 AJAX 在 JS 中用于发出异步网络请求来获取资源。...来自服务器的响应存储在responseText变量中,该变量使用JSON.parse()转换为JavaScript 对象。...我们需要另外使用setRequestHeader设置请求标头“Content-Type” ,并使用send方法中的JSON.stringify将JSON正文作为字符串发送。...如果存在网络错误,则将拒绝,这会在.catch()块中处理。 如果来自服务器的响应带有任何状态码(如200、404、500),则promise将被解析。响应对象可以在.then()块中处理。...将响应代码(例如404、500)视为可以在catch()块中处理的错误,因此我们无需显式处理这些错误。
然而,使用原始套接字,应用程序可以绕过这些封装,直接访问和操作网络协议栈中的原始数据。...AF_INET参数指定了使用IPv4协议,SOCK_RAW参数指定了套接字类型为原始套接字,IPPROTO_TCP参数指定了传输层协议为TCP。如果socket函数返回值为-1,表示创建套接字失败。...然后使用sendto函数将我们自己构造的SYN数据包通过创建的原始套接字发往目标地址。...Q E 使用原始套接字时,需要计算IP报文的校验和吗? 可以不需要。 操作系统中的网络协议栈会自动处理IP头部的计算和填充。...当使用原始套接字发送IP数据包时,操作系统会负责处理IP头部的构建和校验和计算。我们只需要构造IP数据包的内容,将其传递给操作系统,并通过原始套接字发送即可。
在本文中,我们将使用原始套接字来访问诸如IP 和ICMP 头等底层的网络信息。在下面的例子中,我们只对IP 层和更高层感兴趣,因此我们不会去解码以太网头中的信息。...Windows 和Linux 上的包嗅探 在Windows 和Linux 上访问原始套接字有些许不同,但我们更中意于在多平台部署同样的嗅探器以实现更大的灵活性。...在第一个例子中,我们只需设置原始套接字嗅探器,读取一个数据包,然后退出即可。 首先,我们通过构建套接字对象对网络接口上的数据包嗅探进行必要的参数设置①。...然后,我们通过设置套接字选项②设置在捕获的数据包中包含IP 头。下一步③,我们判断程序是否运行在Windows 上,如果是,那么我们发送IOCTL 信号到网卡驱动上以启用混杂模式。...,你会看到类似于下面的输出: 可以看到,我们捕获到的是发送到nostarch.com 的ICMP ping 请求包(基于数据中的nostarch.com 字符串)。
数据包套接字(SOCK_DGRAM) 数据包套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。...数据包套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。...原始套接字(SOCK_RAW) 原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET...比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可以用来发送一些自定包头或自定协议的IP包。...基于TCP的Socket编程最常见的应用场景是在C/S架构下的分布式应用,针对客户端和服务器端提供不同的Socket系统调用。
介绍 原始套接字(raw socket)是一种网络套接字,允许直接发送/接收更底层的数据包而不需要任何传输层协议格式。...平常我们使用较多的套接字(socket)都是基于传输层,发送/接收的数据包都是不带TCP/UDP等协议头部的。...当使用套接字发送数据时,传输层在数据包前填充上面格式的协议头部数据,然后整个发送到网络层,接收时去掉协议头部,把应用数据抛给上层。...如果想自己封装头部或定义协议的话,就需要使用原始套接字,直接向网络层发送数据包。 为了便于后面理解,这里统一称应用数据为 payload,协议头部为 header,套接字为socket。...冒号后面的是子协议,表示监听的是网络层中icmp协议的流量,这个子协议在IP header中字段Protocol(下面的8位协议)体现出,IP header一般也是20字节: ?
参考链接: C++ acos() #include #define PI acos(-1) 主要是利用利用数学函数中的反三角函数,但是要注意一定引入math包 arccos
,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP...SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。 ...其中data是包含接收数据的字符串,address是发送数据的套接字地址。 sk.send(string[,flag]) 将string中的数据发送到连接的套接字。...sk.sendall(string[,flag]) 将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。...每一条线程接收到请求之后如何处理,这个步骤就是由我们自己 定义的类来指定了 """ class MyServer(SocketServer.BaseRequestHandler): #这个handle
2.套接字(socket) 在网络中用来描述计算机中不同程序与其他计算机程序的通信方式。socket其实是一种特殊的IO接口,也是一种文件描述符。...套接字分为三类: 流式socket(SOCK_STREAM):流式套接字提供可靠、面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性。...原始socket:原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用复杂,主要用于一些协议的开发。 套接字由三个参数构成:IP地址,端口号,传输层协议。...套接字的数据结构:C语言进行套接字编程时,常会使用到sockaddr数据类型和sockaddr_in数据类型,用于保存套接字信息。...,大部分的情况下只是用于bind,connect,recvfrom,sendto等函数的参数,指明地址信息,在一般编程中,并不对此结构体直接操作。
回送请求的具体报文: 回送应答的具体报文: ICMP报头格式: ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。...ICMP规则要求在回射应答中返回来自回射请求的标识符、序列号和任何可选数据。在回射请求中存放时间戳使得我们可以在收到回射应答时计算RTT。..., delay / 1000.0); 编译运行: 使用原始套接字通常需要管理特权,因此您将需要以root用户身份运行ping: 捕获数据包: tcpdump -i...any -w ping.pcap -v icmp wireshark打开ping报文: 总结 本文所讲的是实现一个ping命令,ping诊断工具使用原始套接字完成任务,开发这个ping...写这篇文章主要的目标是熟悉原始套接字编程的基本流程,理解ping程序的实现机制,理解ICMP协议。
原始套接字可以访问ICMP和ICMP等协议包,可以读写内核不处理的IP数据包。可以创建自定义的IP数据包首部。一句话,使用原始套接字可以 编写基于IP协议的通讯程序。 ...IP协议第二个参数:SOCKET类型第三个参数:协议类型注意:@如果指定协议为0时,原始套接字可以接收内核传递给原始套接字的任何IP数据包,且只有超级用户才可以创建原始套接字。 ...@当需要编写自己的IP数据包首部时,可以在原始套接字上设置套接字选项IP_HDRINCL.在不设置这个选项的情况下,IP协议自动填充IP数据包的首部。 ...发送数据包 使用原始套接字发送数据包必须遵循以下规则:1.如果没有用connect函数绑定对方地址时,则应使用sendto或sendmsg函数发送数据包,在函数参数中指定对方地址。如?...在将一个IP数据包传送给原始套接字之前,内核需要选择匹配的原始套接字1.数据包的协议域必须与接收原始套接字的协议类型匹配。
概述 原始套接口提供以下三种TCP及UDP套接口一般不提供的功能。 1. 使用原始套接口可以读写ICMPv4,IGMPv4,ICMPv6分组。...例如:Ping程序,就使用原始套接口发送ICMP回射请求,并接受ICMP回射应答。 2. 使用原始套接口可以读写特殊的IPv4数据报,内核不处理这些数据报的IPv4协议字段。 3....(4)在原始套接口上可调用connect函数,但也不常用。connect函数仅设置目的地址,再重申一遍:端口号对原始套接口而言没有意义。...原始套接口输入 接收到的哪些IP分组将传递给原始套接口: (1)接收到的TCP分组和UDP分组决不会传递给任何原始套接口,如果一个进程希望读取包括TCP或UDP分组的IP数据报,那么它们必须在数据链路层读入...对源自Berkeley的实现而言,除了回射请求,时间戳请求和地址掩码请求将完全由内核处理以外,所有收到的ICMP分组都将传递给某个原始套接口。
两种方式均可,这些方法在进行Windows套接字编程时非常重要,可以防止头文件冲突,确保编译顺利进行。...nSize); // 获取时钟计时器的校准值 ULONG GetTickCountCalibrate(); private: SOCKET m_sockRaw; // 原始套接字...这些结构体主要用于在网络编程中处理与IP、ICMP和Ping相关的数据包。在实际应用中,可以使用这些结构体来解析接收到的网络数据包,或者构建要发送的数据包。...类成员说明: m_sockRaw: 用于发送原始套接字的成员变量。 m_event: WSA 事件。 m_usCurrentProcID: 当前进程 ID。...= m_szICMPData) { free(m_szICMPData); m_szICMPData = NULL; } } 构造函数中,首先进行 Winsock 初始化,创建原始套接字
#从服务端接收消息 serve_data = obj_client.recv(1024) print serve_data obj_client.close() 具体的解释在代码中已经给出,可以操作体会...,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP...SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。 ...注:在讲select时会用到 sk.accept() 接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。...其中data是包含接收数据的字符串,address是发送数据的套接字地址。 sk.send(string[,flag]) 将string中的数据发送到连接的套接字。
ping 是一种因特网包探索器,用于测试网络连接量的程序,Ping是工作在TCP/IP网络体系结构中应用层的一个服务命令,主要是向特定的目的主机发送 ICMP 请求报文,测试目的站是否可达及了解其有关状态...import time, struct import socket, select class MyPing(): # 发送原始套接字 def raw_socket(self, dst_addr...= rawsocket.recvfrom(1024) # 获取接收包的icmp头 icmpHeader = received_packet[20:28]..., payload_body) # 连接套接字,并将数据发送到套接字 send_request_ping_time, rawsocket = self.raw_socket...+ i, payload_body) # 连接套接字,并将数据发送到套接字 send_request_ping_time, rawsocket = ping.raw_socket
原理: 通常的套接字程序只能响应与自己MAC地址相匹配的 或者是 广播形式发出的数据帧,对于其他形式的数据帧网络接口采取的动作是直接丢弃 为了使网卡接收所有经过他的封包,要将其设置成混杂模式,通过原始套接字来实现...设置混杂模式: 创建原始套接字, 绑定到一个明确的本地地址, 向套接字发送SIO_RCVALL控制命令, 接收所有的IP包 代码实现步骤: 1 创建原始套接字 2 绑定到明确地址...主程序代码如下: void main() { //创建原始套接字 SOCKET sRaw = socket(AF_INET,SOCK_RAW,IPPROTO_IP); //获取本地...取出封包中的协议头,向用户打印出协议信息。...: break; } } void main() { // 创建原始套节字 SOCKET sRaw = socket(AF_INET, SOCK_RAW,
HTTP协议主要是用在以大型网站作为C&C服务器的场景,例如之前就有使用twitter作为 C&C服务器。...ping命令使用的就是ICMP协议,在ping百度的过程中,咱们使用wireshark抓一下包,这样比较直观。...ICMP报文以IP协议为基础,其报文格式如下: ? 如上图所示,ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部+ 1472字节38字节。...第三节 ping实现 在上面我们简单讲解了ICMP的报文格式,接下来我们使用Python3根据报文格式简单实现一下ping功能,主要用到了raw socket技术,即原始套接字,使用struct pack...原始套接字的初始化,使用如下代码: socket.socket(socket.AF_INET,socket.SOCK_RAW, socket.getprotobyname('icmp')) 里面比较复杂的是计算校验和
socket是什么 什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。 应用程序通常通过"套接字"向网络发出请求或者应答网络请求。...列入你和移动客服咨询问题时,会有一个客服为你解决问题一样,就是你和客服间的相互通信 在socket里就是“发送”和“接收”这两个动作就是socket通信方式 socket.gethostname() ...socket.SOCK_STREAM # 流式socket , for TCP socket.SOCK_DGRAM # 数据报式socket , for UDP socket.SOCK_RAW # 原始套接字...,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP...SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
(SOCK_STREAM):流式套接字提供可靠的、面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性。...原始socket:原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。...listen()函数:在服务端程序成功建立套接字和与地址进行绑定之后,还需要准备在该套接字上接收新的连接请求。此时调用listen()函数来创建一个等待队列,在其中存放未处理的客户端连接请求。...accept()函数:服务端程序调用listen()函数创建等待队列之后,调用accept()函数等待并接收客户端的连接请求。它通常从由bind()所创建的等待队列中取出第一个未处理的连接请求。...connect()函数:该函数在TCP中是用于bind()的之后的client端,用于与服务器端建立连接。 send()和recv():这两个函数分别用于发送和接收数据,用在TCP中。
sockket简介 socekt又称为‘套接字’,用于描述IP和地址端口,是一个通信链路的句柄,应用程序通常通过套接字向网络发出请求或者应答网络请求。...,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP...SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。...其中data是包含接收数据的字符串,address是发送数据的套接字地址。 sk.send(string[,flag]) 将string中的数据发送到连接的套接字。...然后接收传来的数据,并发送给对方数据 传输完毕后,关闭套接字 TCP客户端 创建套接字,连接远端地址 连接后发送数据和接收数据 传输完毕后,关闭套接字 server端: import socket ip_port
当您执行ping命令时,它会向指定的主机发送一系列的ICMP回显请求(echo request)消息,并等待接收ICMP回显响应(echo reply)消息。...在WinSock2.h中定义了一些重要的数据类型和函数,如: WSADATA:保存初始化Winsock库时返回的信息。 SOCKET:表示一个套接字描述符,用于在网络中唯一标识一个套接字。...socket():创建一个新的套接字。 bind():将套接字与本地地址绑定。 listen():将套接字设置为监听模式,等待客户端的连接请求。...accept():接受客户端的连接请求,并返回一个新的套接字描述符,用于与客户端 进行通信。...该函数在应用程序或DLL调用任何Windows套接字函数之前必须首先执行,它扮演着初始化的角色。
领取专属 10元无门槛券
手把手带您无忧上云