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

原始套接 IP_HDRINCL 转

原始套接可以访问ICMP和ICMP等协议包,可以读写内核不处理的IP数据包。可以创建自定义的IP数据包首部。一句话,使用原始套接可以   编写基于IP协议的通讯程序。   ...IP协议第二个参数:SOCKET类型第三个参数:协议类型注意:@如果指定协议为0时,原始套接可以接收内核传递给原始套接的任何IP数据包,且只有超级用户才可以创建原始套接。   ...@当需要编写自己的IP数据包首部时,可以在原始套接上设置套接选项IP_HDRINCL.在不设置这个选项的情况,IP协议自动填充IP数据包的首部。   ...2.大多数ICMP数据包的一个拷贝传送给匹配的原始套接。   3.内核处理的所有其它类型的数据包的一个拷贝都传给匹配的原始套接。   ...在将一个IP数据包传送给原始套接之前,内核需要选择匹配的原始套接1.数据包的协议域必须与接收原始套接的协议类型匹配。

2.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

原始套接和流量嗅探

---- 原始套接和流量嗅探 前言 《Python黑帽子:黑客与渗透测试编程之道》的读书笔记,会包括书中源码,并自己将其中一些改写成Python3版本。...书是比较老了,anyway,还是本很好的书 本篇是第3章原始套接和流量嗅探 1、Windows和Linux上的包嗅探 为了多平台使用,先创建SOCKET,再判断平台 windows允许嗅探所有协议 linux...coding:utf8 -*- import socket import os # 监听主机,即监听那个网络接口,下面的为我的kali的ip host = "10.10.10.145" # 创建原始套接...socket.IPPROTO_ICMP sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol) #raw的中文是生的意思,大概就是原始套接的意思吧...# 创建原始套接, 然后绑定在公开接口上 if os.name == "nt": socket_protocol = socket.IPPROTO_IP else: socket_protocol

1.7K20

Go中原始套接的深度实践

介绍 原始套接(raw socket)是一种网络套接,允许直接发送/接收更底层的数据包而不需要任何传输层协议格式。...平常我们使用较多的套接(socket)都是基于传输层,发送/接收的数据包都是不带TCP/UDP等协议头部的。...如果想自己封装头部或定义协议的话,就需要使用原始套接,直接向网络层发送数据包。 为了便于后面理解,这里统一称应用数据为 payload,协议头部为 header,套接为socket。...表示服务器之间的网络通信 syscall.AF_UNIX表示同一台机器上的进程通信 syscall.AF_INET6表示以IPv6的方式进行服务器之间的网络通信 其他 第二个参数 syscall.SOCK_RAW,表示使用原始套接...文中例子代码都在github-examples,有兴趣的同学可以自己尝试。按照约定的划分,还有一层链路层socket,这个后面再写。

2.8K20

golang使用原始套接构造UDP包

RAW SOCKET 介绍 TCP/IP协议中,最常见的就是原始(SOCKET_RAW)、tcp(SOCKET_STREAM)、udp(SOCKET_DGRA)三种套接。...原始套接能够对底层传输进行控制,允许自行组装数据包,比如修改本地IP,发送Ping包,进行网络监听。这里不做详细介绍,要了解更多可以网上自己查询。...这里要说明一IP头中的首部校验,这个值只校验IP头部,不包含数据。 这里给出校验算法,IP头和UDP头中使用的校验算法是一样的。...= nil { log.Fatal(err) } 这个实现只在linux和mac上测试过,windows上需要借助于第三方吧,比如winpcap。...结语 这里只给出了UDP的实现,TCP的实现比较复杂,以后也会给出TCP实现的例子。 本文来自:Segmentfault 感谢作者:pinecone 查看原文:golang使用原始套接构造UDP包

3.2K50

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

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

1.3K20

Linux网络-套接编程基础

Linux网络编程套接 零、前言 一、网络基础知识 1、源IP地址和目的IP地址 2、源MAC地址和目的MAC地址 3、认识端口号 4、PORT VS PID 5、TCP和UDP协议 6、网络字节序...二、socket编程接口 1、sockaddr结构 2、socket 常见API 零、前言 本章就Linux网络编程进行概念及接口学习,下一篇则是简单的进行上手网络套接编程 一、网络基础知识 1...位的长整数从主机字节序转换为网络字节序 如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回;如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回 二、socket编程接口 1、sockaddr结构 套接不仅支持跨网络的进程间通信...,还支持本地的进程间通信(域间套接) 因此套接提供了sockaddr_in结构体和sockaddr_un结构体,其中sockaddr_in结构体是用于跨网络通信的,而sockaddr_un结构体是用于本地通信的...为了让套接的网络通信和本地通信能够使用同一套函数接口,于是就出现了sockeaddr结构体,该结构体与sockaddr_in和sockaddr_un的结构都不相同,但这三个结构体头部的16个比特位都是一样的

1.4K20

Linux网络-TCPUDP套接编程

零、前言 本章主要是对套接网络编程的一个学习,目标是能够基本的进行套接编程 一、UDP套接 1、创建套接 无论是服务端还是客户端,进行网络编程需要做的第一件事就是创建套接 socket...函数函数原型: int socket(int domain, int type, int protocol); 解释: domain:创建套接的域或者叫做协议家族,也就是创建套接的类型。...相比于UDP套接来说,TCP套接与之在一些地方是相同的,但是TCP的特点是面向链接的流式套接,所以还是有很大的区别的 1、创建套接 同样的tcp的服务端和客户端首先第一件事是创建套接文件...这是一个输入输出型参数 返回值:获取连接成功返回接收到的套接的文件描述符,获取连接失败返回-1,同时错误码会被设置 套接文件之间的区别: socket函数创建的套接文件:用于不断获取客户端发来的连接请求...,同文件的读写是一样是流式的,那么对于TCP来说,使用文件读写的方式进行读写套接文件同样可以达到数据发送和接收的目的 读取套接文件数据,即为接收对应套接建立链接的远端发送来的消息;向套接文件进行写入数据

3.6K10

Linux】网络基础+UDP网络套接编程

套接编程中,常见的有网络套接编程,原始套接编程,unix域间套接编程。 网络套接支持多主机跨网络通信,下面讲到的都是这个套接编程。...原始套接比较难,它可以绕过传输层直接访问网络层以及下面的层,抓包和网络监测工具就是通过原始套接来完成的,文章不谈论原始套接和unix域间套接,只谈论网络套接编程。...unix域间套接只能进行本地通信,无法进行网络通信,这个套接只要在学习网络套接过后,找篇unix域间套接的相关源代码一看就能懂了。 3....创建套接之后我们做一简单的查错处理,接下来的工作就是bind,仅仅创建套接是无法完成网络通信的,还需要给sockfd绑定ip和port以告诉操作系统,sockfd已经和特定的ip和port绑定好了...下面代码是windows下网络套接编程的代码,windows客户端的套接代码仅仅只有初始化windows的socket网络库,以及最后需要调用windows系统的WSACleanup()清理接口外

25410

Linux进程通信之Unix套接(一)

Linux进程通信之Unix套接(一) 什么是套接 所谓套接(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。...一个套接就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。...) AF_INET6(IPV6) AF_UNIX(本地通讯协议,一般用于进程通信,不需要经过网卡) 套接类型 流套接(SOCK_STREAM),提供一个顺序化的、可靠的、全双工的、基于连接的字节流。...TCP 协议即基于这种流式套接。 数据报套接(SOCK_DGRAM)即提供数据报文的支持。(无连接,不可靠、固定最大长度).UDP协议即基于这种数据报文套接。...原始套接(SOCK_RAW)即提供读取原始的网络协议。这种特殊的套接可用于手工构建任意类型的协议。一般使用这个套接来实现 ICMP 请求(例如 ping)。

2.5K30

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

下面通过来分析几个调用来走一上面的inet_create  函数(linux ): 1) socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); protocol =...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.4K00

linux网络编程之socket(十五):UNIX域套接编程和socketpair 函数

UNIX域套接与TCP套接相比较,在同一台主机的传输速度前者是后者的两倍。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。...三、UNIX域套接编程注意点 1、bind成功将会创建一个文件,权限为0777 & ~umask 2、sun_path最好用一个绝对路径 3、UNIX域协议支持流式套接口与报式套接口 4、UNIX...域流式套接connect发现监听队列满时,会立刻返回一个ECONNREFUSED,这和TCP不同,如果监听队列满,会忽略到来的SYN,这导致对方重传SYN。...protocol: 协议类型 sv: 返回套接对 返回值:成功返回0;失败返回-1 实际上socketpair 函数跟pipe 函数是类似的,也只能在同个主机上具有亲缘关系的进程间通信,但...即父进程持有sockfds[0] 套接进行读写,而子进程持有sockfds[1] 套接进行读写。 参考: 《Linux C 编程一站式学习》 《TCP/IP详解 卷一》 《UNP》

3.1K00
领券