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

18.1 Socket 原生套接

原生套接的实现原理依赖于Windows系统中提供的ioctlsocket函数,该函数可将指定的网卡设置为混杂模式,网卡混杂模式(Promiscuous Mode)是常用于计算机网络的一种模式,...启用混杂模式的主要用途之一是网络分析,使用混杂模式可以捕获网络中所有的数据,且不仅仅是它所连接的设备的通信数据。...要实现前提是需要先选中绑定到那个网卡,如下InitAndSelectNetworkRawSocket函数则是实现绑定套接到特定网卡的实现流程,在代码中首先初始化并使用gethostname函数获取到当前主机的主机名...= WSAStartup(MAKEWORD(2, 2), &wsaData)) { return FALSE; } // 创建原始套接 // Windows无法抓取RawSocket MAC...,当读者运行后会看到如下图所示的代码片段,此处笔者就选择三号网卡进行绑定操作,当绑定后此时套接ID对应的则是特定的网卡,后续的操作均可针对此套接ID进行,如下图所示;图片当读者有了设置混杂模式的功能则下一步就是包了

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

    18.1 Socket 原生套接

    原生套接的实现原理依赖于Windows系统中提供的ioctlsocket函数,该函数可将指定的网卡设置为混杂模式,网卡混杂模式(Promiscuous Mode)是常用于计算机网络的一种模式,...启用混杂模式的主要用途之一是网络分析,使用混杂模式可以捕获网络中所有的数据,且不仅仅是它所连接的设备的通信数据。...要实现前提是需要先选中绑定到那个网卡,如下InitAndSelectNetworkRawSocket函数则是实现绑定套接到特定网卡的实现流程,在代码中首先初始化并使用gethostname函数获取到当前主机的主机名...= WSAStartup(MAKEWORD(2, 2), &wsaData)) { return FALSE; } // 创建原始套接 // Windows无法抓取RawSocket...,当读者运行后会看到如下图所示的代码片段,此处笔者就选择三号网卡进行绑定操作,当绑定后此时套接ID对应的则是特定的网卡,后续的操作均可针对此套接ID进行,如下图所示; 当读者有了设置混杂模式的功能则下一步就是包了

    41320

    原始套接 IP_HDRINCL 转

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

    2.4K10

    原始套接和流量嗅探

    ---- 原始套接和流量嗅探 前言 《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的中文是生的意思,大概就是原始套接的意思吧...self.protocol_num] except: self.protocol = str(self.protocol_num) # 下面的代码类似于之前的例子 # 创建原始套接

    1.8K20

    Go中原始套接的深度实践

    介绍 原始套接(raw socket)是一种网络套接,允许直接发送/接收更底层的数据而不需要任何传输层协议格式。...平常我们使用较多的套接(socket)都是基于传输层,发送/接收的数据都是不带TCP/UDP等协议头部的。...当使用套接发送数据时,传输层在数据前填充上面格式的协议头部数据,然后整个发送到网络层,接收时去掉协议头部,把应用数据抛给上层。...如果想自己封装头部或定义协议的话,就需要使用原始套接,直接向网络层发送数据。 为了便于后面理解,这里统一称应用数据为 payload,协议头部为 header,套接为socket。...表示服务器之间的网络通信 syscall.AF_UNIX表示同一台机器上的进程通信 syscall.AF_INET6表示以IPv6的方式进行服务器之间的网络通信 其他 第二个参数 syscall.SOCK_RAW,表示使用原始套接

    3K20

    linux本来端口,Linux

    1、如果要eth0的,命令格式如下: tcpdump -i eth0 -w /tmp/eth0.cap 2、如果要192.168.1.20的,命令格式如下: tcpdump -i etho host...192.168.1.20 -w /tmp/temp.cap 3、如果要192.168.1.20的ICMP,命令格式如下: tcpdump -i etho host 192.168.1.20 and...port 10002 -w /tmp/port.cap 5、假如要vlan 1的,命令格式如下: tcpdump -i eth0 port 80 and vlan 1 -w /tmp/vlan.cap...6、假如要pppoe的密码,命令格式如下: tcpdump -i eht0 pppoes -w /tmp/pppoe.cap 7、假如要eth0的,抓到10000个后退出,命令格式如下: tcpdump...-i eth0 -c 10000 -w /tmp/temp.cap 8、在后台eth0在80端口的,命令格式如下: nohup tcpdump -i eth0 port 80 -w /tmp/temp.cap

    5.7K40

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

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

    1.3K20

    Linux网络套接(二)

    返回值:返回一个新的套接描述符。...首先是写出服务器的代码,代码的思路是这样的: ①首先为服务器创建套接,因为这个是TCP协议,TCP是面向连接的,因此服务器是需要进入监听状态才能让客户端连接,所以使用socket接口创建出来的套接是属于监听套接...=2) { Usage(argv[0]); return 1; } //tcp_server //1.创建套接,此套接为监听套接,用于绑定和监听 int listen_sock...=2) { Usage(argv[0]); return 1; } //tcp_server //1.创建套接,此套接为监听套接,用于绑定和监听 int listen_sock...=2) { Usage(argv[0]); return 1; } //tcp_server //1.创建套接,此套接为监听套接,用于绑定和监听 int listen_sock

    1.9K30

    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.7K10

    linux 进程命令,linux命令之tcpdump详解

    DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [-s snaplen ] [ -w file ] [ expression ] 选项...注意,是最终要获取这么多个。例如,指定”-c 10″将获取10个,但可能已经处理了100个,只不过只有10个是满足条件的。-i interface:指定tcpdump需要监听的接口。...-s len:设置tcpdump的数据抓取长度为len,如果不设置默认将会是65535节。...其他功能性选项:-D:列出可用于的接口。将会列出接口的数值编号和接口名,它们都可以用于”-i”后。-F:从文件中读取的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。...-w:将数据输出到文件中而不是标准输出。可以同时配合”-G time”选项使得输出文件每time秒就自动切换到另一个文件。可通过”-r”选项载入这些文件以进行分析和打印。

    4.8K20

    linux如何是什么,linux命令是什么

    linux命令是“tcpdump”,可以抓取流动在网卡上的数据,可以将网络中传送的数据的“头”完全截获下来提供分析;它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息...本教程操作环境:Red Hat Enterprise Linux 6.1系统、Dell G3电脑。 tcpdump命令是基于unix系统的命令行的数据报嗅探工具,可以抓取流动在网卡上的数据。...-s len:设置tcpdump的数据抓取长度为len,如果不设置默认将会是65535节。...其他功能性选项: -D:列出可用于的接口。将会列出接口的数值编号和接口名,它们都可以用于”-i”后。 -F:从文件中读取的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。...-w:将数据输出到文件中而不是标准输出。可以同时配合”-G time”选项使得输出文件每time秒就自动切换到另一个文件。可通过”-r”选项载入这些文件以进行分析和打印。

    10.7K20

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

    套接编程中,常见的有网络套接编程,原始套接编程,unix域间套接编程。 网络套接支持多主机跨网络通信,下面讲到的都是这个套接编程。...原始套接比较难,它可以绕过传输层直接访问网络层以及下面的层,和网络监测工具就是通过原始套接来完成的,文章不谈论原始套接和unix域间套接,只谈论网络套接编程。...unix域间套接只能进行本地通信,无法进行网络通信,这个套接只要在学习网络套接过后,找篇unix域间套接的相关源代码一看就能懂了。 3....初始化服务器的第一步就是创建服务器的套接,通过套接文件描述符能够帮助我们实现UDP的全双工通信。...第一个参数代表你创建套接的域,是用inet网络套接通信呢?又或是用unix域间套接通信呢?

    37310
    领券