最下面的部分显示了数据的原始的二进制数据,在熟练掌握协议后,查看原始的二进制数据也并不是不可能的。...= (sum & 0xffff) + (sum >> 16); } return (unsigned short)~sum; } ICMP的校验值是一个16位的无符号整型...icmp_header *)szBuff; char icmp_data[32] = { 0 }; WSAStartup(MAKEWORD(2, 2), &wsaData); // 创建原始套接字
原始套接字可以访问ICMP和ICMP等协议包,可以读写内核不处理的IP数据包。可以创建自定义的IP数据包首部。一句话,使用原始套接字可以 编写基于IP协议的通讯程序。 ...IP协议第二个参数:SOCKET类型第三个参数:协议类型注意:@如果指定协议为0时,原始套接字可以接收内核传递给原始套接字的任何IP数据包,且只有超级用户才可以创建原始套接字。 .../n");exit(1);} 原始套接字直接使用IP协议的套接字,所以是非面向连接的。在这个套接字上可以调用connect和bind函数,分别执行绑定对方和本地地址。 ...2.大多数ICMP数据包的一个拷贝传送给匹配的原始套接字。 3.内核处理的所有其它类型的数据包的一个拷贝都传给匹配的原始套接字。 ...在将一个IP数据包传送给原始套接字之前,内核需要选择匹配的原始套接字1.数据包的协议域必须与接收原始套接字的协议类型匹配。
在本文中,我们将使用原始套接字来访问诸如IP 和ICMP 头等底层的网络信息。在下面的例子中,我们只对IP 层和更高层感兴趣,因此我们不会去解码以太网头中的信息。...Windows 和Linux 上的包嗅探 在Windows 和Linux 上访问原始套接字有些许不同,但我们更中意于在多平台部署同样的嗅探器以实现更大的灵活性。...我们将先创建套接字对象,然后再判断程序在哪个平台上运行。在Windows 平台上,我们需要通过套接字输入/输出控制(IOCTL)1设置一些额外的标志,它允许在网络接口上启用混杂模式。...在第一个例子中,我们只需设置原始套接字嗅探器,读取一个数据包,然后退出即可。 首先,我们通过构建套接字对象对网络接口上的数据包嗅探进行必要的参数设置①。...然后,我们通过设置套接字选项②设置在捕获的数据包中包含IP 头。下一步③,我们判断程序是否运行在Windows 上,如果是,那么我们发送IOCTL 信号到网卡驱动上以启用混杂模式。
---- 原始套接字和流量嗅探 前言 《Python黑帽子:黑客与渗透测试编程之道》的读书笔记,会包括书中源码,并自己将其中一些改写成Python3版本。...书是比较老了,anyway,还是本很好的书 本篇是第3章原始套接字和流量嗅探 1、Windows和Linux上的包嗅探 为了多平台使用,先创建SOCKET,再判断平台 windows允许嗅探所有协议 linux...= "10.10.10.145" # 创建原始套接字,然后绑定在公开接口上 if os.name == "nt": socket_protocol = socket.IPPROTO_IP...socket.IPPROTO_ICMP sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol) #raw的中文是生的意思,大概就是原始套接字的意思吧...self.protocol_num] except: self.protocol = str(self.protocol_num) # 下面的代码类似于之前的例子 # 创建原始套接字
介绍 原始套接字(raw socket)是一种网络套接字,允许直接发送/接收更底层的数据包而不需要任何传输层协议格式。...平常我们使用较多的套接字(socket)都是基于传输层,发送/接收的数据包都是不带TCP/UDP等协议头部的。...当使用套接字发送数据时,传输层在数据包前填充上面格式的协议头部数据,然后整个发送到网络层,接收时去掉协议头部,把应用数据抛给上层。...如果想自己封装头部或定义协议的话,就需要使用原始套接字,直接向网络层发送数据包。 为了便于后面理解,这里统一称应用数据为 payload,协议头部为 header,套接字为socket。...表示服务器之间的网络通信 syscall.AF_UNIX表示同一台机器上的进程通信 syscall.AF_INET6表示以IPv6的方式进行服务器之间的网络通信 其他 第二个参数 syscall.SOCK_RAW,表示使用原始套接字
RAW SOCKET 介绍 TCP/IP协议中,最常见的就是原始(SOCKET_RAW)、tcp(SOCKET_STREAM)、udp(SOCKET_DGRA)三种套接字。...原始套接字能够对底层传输进行控制,允许自行组装数据包,比如修改本地IP,发送Ping包,进行网络监听。这里不做详细介绍,要了解更多可以网上自己查询。...本文来自:Segmentfault 感谢作者:pinecone 查看原文:golang使用原始套接字构造UDP包
套接字:通信的端点 套接字 有两种类型的套接字:基于文件的和面向网络的。 IPC:进程间通信。...Python只支持AF_UNIX(基于文件)、AF_NETLINK(使用标准的BSD套接字接口进行用户级别和内核级别代码之间的IPC)、AF_TIPC(透明的进程间通信)、AF_INET(基于网络)家族...面向连接的套接字与无连接的套接字 面向连接的套接字 面向连接的套接字:在进行通信之前必须先建立一个连接。这种类型的通信也称为虚拟电路或流套接字。 实现这种连接类型的主要协议是传输控制协议(TCP)。...无连接的套接字 与虚拟电路形成鲜明对比的是数据报类型的套接字,它是一种无连接的套接字。实现这种连接类型的主要协议是用户数据报协议(UDP)。...Python中的网络编程 Socket详细介绍 TCP服务器端工作流程 创建服务器端套接字A 将套接字A与地址B使用bind函数绑定 使用listen函数使服务器开始监听 使用accept函数返回新的套接字对象
# 获取tcp/ip套接字 tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 获取udp/ip套接字 udpSock = socket.socket...# 例如 tcpSock = socket(AF_INET, SOCK_STREAM) 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept...s.getsockname() 当前套接字的地址 s.getsockopt() 返回指定套接字的参数 s.setsockopt() 设置指定套接字的参数 s.close() 关闭套接字 面向锁的套接字方法...s.setblocking() 设置套接字的阻塞与非阻塞模式 s.settimeout() 设置阻塞套接字操作的超时时间 s.gettimeout() 得到阻塞套接字操作的超时时间 面向文件的套接字的函数...这些I/O缓冲区特性可整理如下: I/O缓冲区在每个TCP套接字中单独存在; I/O缓冲区在创建套接字时自动生成; 即使关闭套接字也会继续传送输出缓冲区中遗留的数据; 关闭套接字将丢失输入缓冲区中的数据
UDPserver.py 1 import socket 2 #导入套接字模块 3 4 s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)...socket.AF_INET:IPV4 6 # - socket.STREAM:TCP 7 # - socket.DGRAM:UDP 8 9 s.bind(('',25555)) 10 #绑定套接字有效地址和端口...break 27 28 print('[+] Server Close......') 29 s.close UDPclient.py 1 import socket 2 #导入套接字模块...: %s'%(data.decode('utf-8'))) 24 except KeyboardInterrupt: 25 break 26 27 c.close() UDP套接字模型...socket.AF_INET,socket.SOCK_DGRAM) s.bind(('',25555)) data,c_addr = s.recvfrom(1024) 别人发来的消息 就直接发到s服务端套接字了
IP地址 和 端口号 每台电脑连接网络都会有IP地址 需要记住:127.0.0.1 localhost 是本机地址 端口号 需要注意:一台主机有0~65535个端口号 端口是用来区分应用程序 套接字...>创建套接字实例 >三种套接字 建立套接字连接 >服务端 >客户端 代码敲到这里,要注意啦~ 服务端计算机会拒绝连接,是服务端套接字还没有开始监听 再敲一遍服务端,你就会发现哪里少了一步啦~
◆Socket 基础知识◆ 套接字(Sockct)随着 TCP/IP协议的使用,也越来越多地被使用在网络应用程序的构建中,实际上 Socket编程也已经成为了网络中传送和接收数据的首选方法,套接字最早是由伯克利在...Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求,Socket起源于Unix而Unix/Linux基本哲学之一就是"...Pythhon 标准库中支持套接口的模块是Socket,其中包含生成套接字、等待连接、建立连接和传输数据的方法,任何应用程序需要使用套接字,都必须调用Socket方法生成一个套接字对象,对于服务器端而言...socket.SOCK_STREAM TCP通信 socket.SOCK_DGRAM UDP通信 SOCK_RAW 原始套接字,可处理ICMP、IGMP等网络报文 SOCK_RDM...(ipaddr,port) sk.getsockname() 返回套接字自己的地址,通常是一个元组(ipaddr,port) sk.fileno() 套接字的文件描述符 ◆实现TCP传输◆ 服务端:
前面提到服务端套接字的绑定与监听 ? 服务端接受连接并生成对等的连接套接字 ?...res = server.accept() # 接受连接请求 >>>type(res) # 返回一个元组 >>>conn, addr = res # conn 元组第一项是一个对等的连接套接字...>>>addr # 元组第二项是对等套接字地址元组 >>>conn is server # 对等的连接套接字与服务端套接字是不同的套接字...使用套接字传输 >客户端发送请求数据到服务端 ? >>>client.send(b'hello world!')...>>>conn.recv(1024) # 指明一次性能接收的最大的字节数量 客户端 一发 一收 服务端 一收 一发 断开套接字连接 >客户端主动断开连接 ?
一、Socket 套接字简介 1、Socket 套接字概念 Socket 套接字 是一种 进程之间的 通信机制 , 通过套接字可以在 不同的进程之间 进行数据交换 ; 在 网络编程 中 , Socket...套接字 主要用于 客户端 与 服务器 之间的 通信 , 大部分 网络相关的应用程序 , 都使用到了 Socket 套接字技术 ; 2、Socket 套接字类型 套接字有两种类型 : 流套接字 : 提供了一个可靠的...3、Socket 套接字使用步骤 Socket 套接字使用步骤 : 创建套接字 : 使用 套接字 API 创建一个套接字对象 , 一般由 编程语言 官方提供 标准 API ; 绑定 IP 地址和端口号...: 将套接字与一个 IP 地址 和 端口号绑定 ; 建立连接 : 服务器端监听连接 : 对于流套接字,需要在服务器端监听客户端的连接请求 ; 客户端建立连接 : 对于流套接字,客户端需要与服务器建立连接...; 发送和接收数据 : 使用 Socket 套接字 发送 或 接收 数据 ; 关闭连接 : 数据传输完毕后,关闭 Socket 套接字连接 ; 4、Socket 套接字服务端与客户端 Socket 套接字
再来练习~ 不断接收连接的服务端 >服务端 >客户端 普通套接字实现的服务端的缺陷 经过前几次的练习,你会发现一次只能服务一个客户端 只要客户端断开连接,服务端也就断开。...accept 阻塞 >在没有新的套接字来之前,不能处理已经建立连接的套接字的请求。 recv 阻塞 >没有接受到客户端请求数据之前,不能与其他客户端建立连接! 普通服务器的IO模型
服务器端: #导入模块 import socket import threading import random import time #创建一个函数来创建套接字 def sock_start():... #创建一个套接字,并以tcp链接(主机(ip)+端口(port)) sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) ...#绑定主机加端口(''空表示任意的主机) #绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址 sock.bind(('',8000...死循环一直等待这主机来连接 while True: #有主机来连接,建立连接 client,address =sock.accept() #创建一个套接字... 客户端3.py # Author: HuXianyong # Date : 2018-08-23 15:26 import socket,time my_name = '客户端3' #创建一个套接字
Socket网络通信套接字 socket库提供了一个底层C API,可以使用BSD套接字接口实现网络通信。...什么是套接字? 套接字是程序在本地或者通过互联网来回传递数据时所用通信通道的一个端点。...套接字有2个主要属性用于控制如何发送数据:地址簇(address family)控制所用的OSI网络层协议;套接字类型(socket type)控制传输层协议。...套接字类型 套接字类型有两种: SOCK_DGRAM:面向消息的数据报传输,数据报套接字通常与UDP关联,即用户数据报协议。这些套接字能提供不可靠的消息传送。...IP地址的表示方式 如果读者有C的经验,那么肯定知道,通过C语言编写的套接字程序是使用struct sockaddr结构体,它将IP地址表示为二进制,而不是上面显示的Python字符串形式。
当连接一旦建立,那么客户端就可以直接通过该套接字向服务器发送数据。而无需向UDP连接中那样需要指定目的地址。下面我们来看客户端代码。...True: print("receive data:"); data_socket,client_addr = server_socket.accept(); #获取请求方的地址,并创建一个新的套接字...server_socket套接字只是用来监听请求的,不是真正的数据传输套接字。在accept函数捕捉到TCP连接请求以后,建立一个新的用于数据传输的套接字data_socket。...客户端和服务器的数据传输就是在该套接字上进行。 借用《计算机网络——自顶向下方法》这本书里面的一幅图来形象的描述TCP连接建立的过程。 ?...三次握手的过程是于欢迎套接字之间进行的,真正的数据传输是在新的套接字上进行的。实质上,套接字就是管道的一个升级版本。只不过管道只能在本机进程之间进行数据传输,套接字能在网络上的主机中进行通信。
非阻塞套接字与普通套接字的区别应该在哪里? >在Python中,可以使用socket.setblocking(0)将套接字设置为非阻塞。...>非阻塞套接字在调用send,recv,connect,accept后会立即返回。 使用非阻塞套机字实现阻塞的服务端 ? ? 使用一个客户端连接过来 ? 给服务端 try 一下 ?...非阻塞客户端套接的注意点 > connect操作一定会引发BlockingIOError异常 > 如果连接没有建立,那么send操作引发OSError异常 非阻塞 IO 模型 ?
套接字成为了应用程序进行通信的一种抽象机制。每一个进程都有一个或者多个套接字。当生成一个套接字的时候,就会为它分配一个端口号。我们是在C/S架构上应用UDP套接字编程。...下面是服务器代码: #python3实现循环无连接服务器 #包含socket库 from socket import *; #服务器端口 server_port = 8000; #创建套接字,设置Ipv4...,client_address); server_socket.close(); 客户端代码: #python3实现的客户端代码 #包含网络模块 from socket import *; #服务器地址以及端口号...#127.0.0.1是本地回环地址,经常用来进行测试,也可以使用域名localhost来代替该ip地址 server_address = '127.0.0.1'; server_port = 8000; #创建套接字...创建套接字的时候注意UDP是SOCK_DGRAM。服务器也使用sendto函数来发送响应给客户端。recvfrom函数能够接受包,并知晓客户端的地址。
localhost' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST,PORT) tcpSocket = socket(AF_INET,SOCK_STREAM) #创建套接字