首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原始套接字打造ping命令

ICMP协议的类型码与代码根据不同的情况,各自取不同的值。Ping命令类型码用到了2个值,分别是0和8。而代码的取值都是0。...简单来说,ping命令发出的数据中,类型是8,代码是0,如果对方有回应,那么对方回应的数据中,类型是0,代码是0。...标识2的部分用于显示筛选后的ICMP记录,从这里可以明显看出源IP地址、目的IP地址和协议的类型。标识3的部分用于显示ICMP数据结构的值和附加的数据内容。...最下面的部分显示了数据的原始的二进制数据,在熟练掌握协议后,查看原始的二进制数据也并不是不可能的。...icmp_header *)szBuff; char icmp_data[32] = { 0 }; WSAStartup(MAKEWORD(2, 2), &wsaData); // 创建原始套接字

1.5K30

Go中原始套接字的深度实践

介绍 原始套接字(raw socket)是一种网络套接字,允许直接发送/接收更底层的数据包而不需要任何传输层协议格式。...平常我们使用较多的套接字(socket)都是基于传输层,发送/接收的数据包都是不带TCP/UDP等协议头部的。...当使用套接字发送数据时,传输层在数据包前填充上面格式的协议头部数据,然后整个发送到网络层,接收时去掉协议头部,把应用数据抛给上层。...如果想自己封装头部或定义协议的话,就需要使用原始套接字,直接向网络层发送数据包。 为了便于后面理解,这里统一称应用数据为 payload,协议头部为 header,套接字为socket。...其他 第二个参数 syscall.SOCK_RAW,表示使用原始套接字,可以构建传输层的协议头部,启用IP_HDRINCL的话,IP层的协议头部也可以构造,就是上面区分的传输层socket和网络层socket

3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    原始套接字 IP_HDRINCL 转

    原始套接字可以访问ICMP和ICMP等协议包,可以读写内核不处理的IP数据包。可以创建自定义的IP数据包首部。一句话,使用原始套接字可以   编写基于IP协议的通讯程序。   ...IP协议第二个参数:SOCKET类型第三个参数:协议类型注意:@如果指定协议为0时,原始套接字可以接收内核传递给原始套接字的任何IP数据包,且只有超级用户才可以创建原始套接字。   .../n");exit(1);}   原始套接字直接使用IP协议的套接字,所以是非面向连接的。在这个套接字上可以调用connect和bind函数,分别执行绑定对方和本地地址。   ...2.大多数ICMP数据包的一个拷贝传送给匹配的原始套接字。   3.内核处理的所有其它类型的数据包的一个拷贝都传给匹配的原始套接字。   ...在将一个IP数据包传送给原始套接字之前,内核需要选择匹配的原始套接字1.数据包的协议域必须与接收原始套接字的协议类型匹配。

    2.4K10

    原始套接字和流量嗅探

    ---- 原始套接字和流量嗅探 前言 《Python黑帽子:黑客与渗透测试编程之道》的读书笔记,会包括书中源码,并自己将其中一些改写成Python3版本。...,大概就是原始套接字的意思吧 sniffer.bind((host, 0)) #这里端口为0,监听所有端口吧~ # 设置在捕获的数据包中包含IP头 sniffer.setsockopt(socket.IPPROTO_IP...,大概就是原始套接字的意思吧 sniffer.bind((host, 0)) #这里端口为0,监听所有端口吧~ # 设置在捕获的数据包中包含IP头 sniffer.setsockopt(socket.IPPROTO_IP...,大概就是原始套接字的意思吧 sniffer.bind((host, 0)) #这里端口为0,监听所有端口吧~ # 设置在捕获的数据包中包含IP头 sniffer.setsockopt(socket.IPPROTO_IP...,大概就是原始套接字的意思吧 sniffer.bind((host, 0)) #这里端口为0,监听所有端口吧~ # 设置在捕获的数据包中包含IP头 sniffer.setsockopt(socket.IPPROTO_IP

    1.8K20

    《Python黑帽子》:原始套接字和流量嗅探

    在本文中,我们将使用原始套接字来访问诸如IP 和ICMP 头等底层的网络信息。在下面的例子中,我们只对IP 层和更高层感兴趣,因此我们不会去解码以太网头中的信息。...Windows 和Linux 上的包嗅探 在Windows 和Linux 上访问原始套接字有些许不同,但我们更中意于在多平台部署同样的嗅探器以实现更大的灵活性。...我们将先创建套接字对象,然后再判断程序在哪个平台上运行。在Windows 平台上,我们需要通过套接字输入/输出控制(IOCTL)1设置一些额外的标志,它允许在网络接口上启用混杂模式。...在第一个例子中,我们只需设置原始套接字嗅探器,读取一个数据包,然后退出即可。 首先,我们通过构建套接字对象对网络接口上的数据包嗅探进行必要的参数设置①。...混杂模式允许我们嗅探网卡上流经的所有数据包,即使数据的目的地址不是本机。然后,我们通过设置套接字选项②设置在捕获的数据包中包含IP 头。

    1.3K20

    Go中链路层套接字的实践

    如果校验错误,直接丢弃掉,不会送到上层的协议栈中,链路层只保证数据帧的正确性(丢掉错误的)。具体数据报的完整性由上层控制,比如TCP重传。...链路层最大长度是1518字节,除去18字节的头部和尾部,只剩1500字节,也就是MTU(最大传输单元)的由来,并约定最小传输长度64字节。 2....拿到网络接口设备的详细信息,eth0是上面的网络设备名字: ifi, err := net.InterfaceByName("eth0") util.CheckError(err) 然后使用原始套接字绑定到该网络设备上...第三个则对应头部中协议类型(ehter type),比如只接收 IP 协议的数据,也可以接收所有的。可在Linux中if_ether文件查看相应的值。...协议尾部的4字节不需要处理,在发送数据的时候由网络设备并添加,接收的时候由设备校验并去除。在以前的有些计算机中,是需要自己添加或移除尾部的,后面可介绍下该校验算法。

    1.8K20

    C中实现TCP套接字

    如何在C中实现TCP套接字 最近一直出差,大家不好意思。文章更新的有点慢,希望大家包涵!!谢谢!!!今天讲工业现在用到最多的通讯协议。 TCP套接字用于服务器和客户端进程之间的通信。...return 0; } 解释 包括头文件sys/socket.h和arpa/inet.h: #include #include 创建一个返回套接字描述符的套接字...;稍后将在代码中使用它来引用套接字: int socket_desc = socket(AF_INET, SOCK_STREAM, 0); 的服务器端代码保持在所述服务器和类型的变量的客户机两者的地址信息..., 1); 通过接受传入的连接来存储客户端的地址和套接字描述符: struct sockaddr client_addr; int client_size = sizeof(client_addr);...服务器回复“这是服务器的消息”,并且通信终止。 指示 1、单击下面的小部件中的“运行”按钮,然后执行服务器的命令。如果成功创建了套接字,将显示消息“正在侦听传入的连接…”。

    97620

    accept()返回的套接字绑定哪个端口 新旧套接字的联系

    此时我们需要区分两种套接字,一种套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,一个套接字会从主动连接的套接字变身为一个监听套接字;而accept返回是一个连接套接字...参数sockfd  参数sockfd就是上面解释中的监听套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。...因为你要找的那个人不可能随时等你来,而监听套接字就是专职等你来问,它回答你要找的人在哪,并唤醒你要找的人,于是通话就建立起来了,就像现实生活中的接线员一样。...参数sockfd  参数sockfd就是上面解释中的监听套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。...因为你要找的那个人不可能随时等你来,而监听套接字就是专职等你来问,它回答你要找的人在哪,并唤醒你要找的人,于是通话就建立起来了,就像现实生活中的接线员一样。

    3.9K30

    Python网络编程中的套接字名和DNS解析

    这一次要讲的是套接字名和DNS,并且还会涉及到网络数据的发送接受和网络错误的发生和处理。下面说套接字名,在创建和部署每个套接字对象时总共需要做5个主要的决定,主机名和IP地址是其中的最后两个。...', 1088)) 可以看到我们指定了4个值,两个用来做对套接字做配置,另外两个提供bind()调用所需要的地址。...第2个参数就是套接字类型,然后我们解释一下套接字类型,尽管TCP和UDP是AFINET协议族特有的,但是套接字接口的设计者决定基于数据报的套接字这一宏观的概念创建一些更通用的名字,这就是SOCKDGRAM...至于更详细的一些东西,可以看相关的文档。 下面这段代码是把上面内容结合起来,设计了一个简单的例子。下面是使用getaddrinfo()创建并连接套接字。...解析邮箱域名是多数Python程序中对原始DNS查询的一个应用。 下面拿邮箱域名解析规则RFC5321来说,如果存在MX记录,则必须尝试与SMTP来进行通信。

    3.5K70

    基于TCP协议的套接字编程

    在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。...注意:也有人将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序...s.getsockname() 当前套接字的地址 s.getsockopt() 返回指定套接字的参数 s.setsockopt() 设置指定套接字的参数 s.close() 关闭套接字 4.面向锁套接字...方法 用途 s.setblocking() 设置套接字的阻塞与非阻塞模式 s.settimeout() 设置阻塞套接字操作的超时时间 s.gettimeout() 得到阻塞套接字操作的超时时间 5....面向文件套接字 方法 用途 s.fileno() 套接字的文件描述符 s.makefile() 创建一个与该套接字相关的文件 4.示例 1.服务端 import socket #1、买手机 phone

    83610

    浅谈原始套接字 SOCK_RAW 的内幕及其应用(port scan, packet sniffer, syn flood, icmp flood)

    buffer,对一般的套接字,如SOCK_STREAM, SOCK_DGRAM 来说,此时缓冲区只有user data,其他各层的头部已经被去除,而对于SOCK_RAW 来说是IP head + IP...0 , &saddr , &saddr_size);     //Now process the packet     ProcessPacket(buffer , data_size); } 即创建原始套接字...Error message : %s \n" , errno , strerror(errno));         exit(0);     } } 创建一个原始套接字s,开启IP_HDRINCL 选项...另开一个线程创建另一个原始套接字,仿照packet sniffer 进行数据包的接收,分解tcp 头部看是否syn == 1 && ack == 1 && dest_addr == src_addr,...如果不追求效率,很简单的做法是直接用普通的套接字,循环端口去connect,成功就表明端口是打开的,只是三次握手完整了一回。

    3.6K00

    CC++ 套接字通信类的封装

    基于 C 语言的封装 基于 TCP 的套接字通信分为两部分:服务器端通信和客户端通信。...我们只要掌握了通信流程,封装出对应的功能函数也就不在话下了,先来回顾一下通信流程: 服务器端 创建用于监听的套接字 将用于监听的套接字和本地的 IP 以及端口进行绑定 启动监听 等待并接受新的客户端连接...,连接建立得到用于通信的套接字和客户端的 IP、端口信息 使用得到的通信的套接字和客户端通信(接收和发送数据) 通信结束,关闭套接字(监听 + 通信) 客户端 创建用于通信的套接字 使用服务器端绑定的...IP 和端口连接服务器 使用通信的套接字和服务器通信(发送和接收数据) 通信结束,关闭套接字(通信) 1.1 函数声明 通过通信流程可以看出服务器和客户端有些操作步骤是相同的,因此封装的功能函数是可以共用的...创建和销毁套接字的函数去掉了,这两个操作可以分别放到构造和析构函数内部进行处理。 在 C++ 中可以适当的将 char* 替换为 string 类,这样操作字符串就更简便一些。

    2K31

    Java Socket:飞鸽传书的网络套接字

    而在 Java 中,网络套接字(Socket)扮演了同样的角色。 套接字(Socket)是一个抽象层,应用程序可以通过它发送或接收数据;就像操作文件那样可以打开、读写和关闭。...套接字允许应用程序将 I/O 应用于网络中,并与其他应用程序进行通信。网络套接字是 IP 地址与端口的组合。...需要注意的是,套接字在建立的时候,如果远程主机不可访问,这段代码就会阻塞很长时间,直到底层操作系统的限制而抛出异常。所以一般会在套接字建立后设置一个超时时间。...server.accept(); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); 客户端套接字发送的所有信息都会包裹在服务器端套接字的输入流中...;而服务器端套接字发送的所有信息都会包裹在客户端套接字的输出流中。

    83821

    Socket编程基础-套接字的创建和使用

    Socket编程是在计算机网络中实现应用程序之间通信的一种方式。套接字(socket)是一种通信机制,可以用于不同主机之间的进程间通信,也可以用于同一主机内进程之间的通信。...套接字的使用需要两个端点:一个是服务器端,另一个是客户端。服务器端是负责提供服务的主机,客户端是向服务器发出请求的主机。...创建套接字创建套接字的基本步骤如下:导入socket模块在Python中,需要先导入socket模块才能使用套接字。...# 创建一个IPv4的流套接字sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)绑定套接字如果要在服务器端使用套接字,则需要将套接字绑定到一个地址和端口上...# 将套接字设置为监听状态,最大连接数为5sock.listen(5)使用套接字使用套接字可以实现不同主机之间或同一主机内进程之间的通信。下面将介绍如何使用套接字进行通信。

    72250

    Windows套接字CAsyncSocket类的使用「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。...TCP编程的服务器端一般步骤是: 1、创建一个CAsyncSocket或CSocket类或其子类对象A,用于监听客户端连接,然后通过Create函数设定端口号和协议类型为 SOCK_STREAM。...2、开启监听,用函数Listen(); 3、接收客户端上来的连接,用函数Accept(&B);并且把连接连接的对象存到B中,以便通信使用。...6、关闭网络连接B.Close; 8、关闭监听A.Close; TCP编程的客户端一般步骤是: 1、创建一个CAsyncSocket或CSocket类或其子类对象C,用Create函数设定端口号和协议类型为...: UDP编程的服务器端与客户端过程一样,因为不需要建立监听和连接,所以一般步骤都是: 1、创建一个CAsyncSocket或CSocket类或其子类对象A,用于监听客户端连接,然后通过Create

    66520
    领券