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

尝试使用原始套接字在Python 3中盲目发送IP包,但不断得到ARP查找如何禁用

在Python 3中,要尝试使用原始套接字盲目发送IP包,但不断得到ARP查找的问题,可以通过禁用ARP来解决。下面是一个完善且全面的答案:

ARP(Address Resolution Protocol)是一种用于将IP地址解析为MAC地址的协议,它在局域网中起到重要的作用。当使用原始套接字在Python 3中发送IP包时,系统会自动执行ARP查找,以获取目标主机的MAC地址。然而,有时候我们希望绕过ARP查找,直接发送IP包。

要在Python 3中禁用ARP查找,可以使用socket模块的SOCK_RAW套接字类型,并设置IP_HDRINCL选项。这样可以让操作系统不自动添加IP头部,从而绕过ARP查找。

下面是一个示例代码:

代码语言:txt
复制
import socket
import struct

def send_ip_packet(dest_ip, src_ip, payload):
    # 创建原始套接字
    s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
    
    # 禁用ARP查找
    s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
    
    # 构造IP头部
    ip_header = struct.pack('!BBHHHBBH4s4s',  # IP头部格式
                            69, 0,  # 版本和服务类型
                            20 + len(payload),  # 总长度
                            54321, 0,  # 标识和标志
                            64, socket.IPPROTO_TCP,  # TTL和上层协议
                            socket.inet_aton(src_ip),  # 源IP地址
                            socket.inet_aton(dest_ip))  # 目标IP地址
    
    # 发送IP包
    s.sendto(ip_header + payload, (dest_ip, 0))
    
    # 关闭套接字
    s.close()

# 示例用法
dest_ip = '目标IP地址'
src_ip = '源IP地址'
payload = b'要发送的数据'

send_ip_packet(dest_ip, src_ip, payload)

在上述示例代码中,send_ip_packet函数接受目标IP地址、源IP地址和要发送的数据作为参数。它使用socket模块创建一个原始套接字,并设置IP_HDRINCL选项来禁用ARP查找。然后,使用struct模块构造IP头部,并将IP头部和数据一起发送到目标IP地址。

需要注意的是,使用原始套接字发送IP包需要具有足够的权限,通常需要以管理员或超级用户身份运行程序。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供弹性计算能力,满足各种业务需求。产品介绍链接
  • 腾讯云私有网络(VPC):提供安全可靠的网络环境,实现不同云资源的隔离和互通。产品介绍链接
  • 腾讯云安全组:用于设置网络访问控制规则,保护云服务器的安全。产品介绍链接
  • 腾讯云弹性公网IP(EIP):提供静态的公网IP地址,使云服务器可以通过公网访问。产品介绍链接
  • 腾讯云云监控(Cloud Monitor):提供全方位的云资源监控和告警服务。产品介绍链接
  • 腾讯云云安全中心(Cloud Security Center):提供全面的云安全管理和威胁防护服务。产品介绍链接

以上是关于在Python 3中禁用ARP查找并盲目发送IP包的完善且全面的答案。希望对你有帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

完美解决Python套接编程时TCP与粘问题

为了优化和减少带宽占用,避免大量小包堵塞网络,发送端会在发送大量小包时积累一定数量的数据之后组成一个大包晚些时间再发送(粘),发送大包时会根据情况切分成多个发送)。...如果到网上(甚至一些书上)搜索资料,会说禁用Nagle算法就可以了,也就是设置套接属性启用TCP_NODELAY,非常简单。既然如此,那就赶紧用起来吧。...Python中,标准库socket封装了套接编程需要的功能,创建套接之后可以使用setsockopt来设置当前套接的各种属性,其中就包括禁用和粘的延迟从而禁用Nagle算法。 ?...这听起来是个好思路,但真正用起来的时候难度还是很大的,感兴趣的朋友可以尝试一下。 再一个思路也是传输大量数据时经常使用的,就是发送端首先告诉对方接下来要发送的数据长度,然后再发送实际数据。...现在的问题就是如何确保把数据长度有效传递给对方了,可以使用Python标准库struct把整数序列化为字节串发送给对方,而这个字节串的长度固定为4,这样的话,接收端使用recv(4)接收到这个字节串再反序列化为整数就可以了

2.1K41

arp欺骗攻击原理_arp攻击的原理及防范

什么是ARP欺骗攻击 基于如下原则: 任何主机均能发送伪造包给局域网中的另一主机; 任一主机相信它们接受到的所有; 当一个新的响应到达时,它甚至没有请求包被发送的情况下覆盖掉旧的记录。.../*SOCKET_STREAM:流式套接 SOCKET_DGRAM:数据报式套接 SOCKET_RAW:原始套接 创建套接:socket() 绑定本机端口:bind() 建立连接:connect...(),accept() 倾听端口:listen() 数据传输:send(),recv() 输入/输出多路复用:select() 关闭套接:closesocket() */ /*通过使用#ifdef指示符...这个函数是用来发送伪造的arp数据的 */ for (;;) { struct host *target = targets; while(target->ip) { arp_send(l, ARPOP_REPLY...发送攻击后,在被攻击机中进行ping操作,发现ping不通了,果然网了。

4.5K20
  • Python黑帽子》:原始套接和流量嗅探

    本文中,我们将使用原始套接来访问诸如IP 和ICMP 头等底层的网络信息。在下面的例子中,我们只对IP 层和更高层感兴趣,因此我们不会去解码以太网头中的信息。...攻击者需要了解网络中所有潜在的目标以便他们开展侦察和漏洞攻击尝试。 绝大部分操作系统处理UDP 闭合端口时,存在一种共性行为,我们可以通过这种行为来确定某个IP 地址上是否有主机存活。...Windows 和Linux 上的嗅探 Windows 和Linux 上访问原始套接有些许不同,但我们更中意于多平台部署同样的嗅探器以实现更大的灵活性。...第一个例子中,我们只需设置原始套接嗅探器,读取一个数据,然后退出即可。 首先,我们通过构建套接对象对网络接口上的数据嗅探进行必要的参数设置①。...然后,我们通过设置套接选项②设置捕获的数据中包含IP 头。下一步③,我们判断程序是否运行在Windows 上,如果是,那么我们发送IOCTL 信号到网卡驱动上以启用混杂模式。

    1.3K20

    Python3之网络编程

    由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。 ? ​...以太网头 ipip数据 ARP协议 arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到 通信是基于...mac的广播方式实现,计算机发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议 arp协议功能:广播的方式发送数据,获取目标主机的mac地址 协议工作方式:每台主机ip...s.sendall() 完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。...来,大家自己尝试着看看源码: # 查找属性的顺序:ThreadingTCPServer->ThreadingMixIn->TCPServer->BaseServer # 实例化得到server,先找

    1K40

    八股文!!

    早期的IP地址网络号与主机号使用固定分配 基于子网掩码的划分 子网掩码将ip地址中网络号的位设置为1,主机标识中的位设置为0 IP路由配置 发送数据时,首先确认IP中的目的IP地址,再从路由控制表中找到与该地址具有相同网络地址的记录...并且可以让迷途的分组该时间内自然消亡,不会影响以该套接对建立的新链接。...机器崩溃 机器崩溃时,tcp内核模块无法做出反应,对端不会接收到任何通知也不会再接收到任何数据 另一端read该套接时,将会被挂起或得到EAGAIN错误 另一端write该套接时将会持续重传,直到...read该套接时,将会被挂起或得到EAGAIN错误。...,永远无法发现对端异常 网络断开 网络断开时,数据无法发送到对方,正常的数据通信和触发关闭链接的报文都被抑制 另一端read该套接时,将会被挂起或得到EAGAIN错误 另一端write该套接时将会持续重传

    1K11

    Python使用scapy模块编写ARP欺骗脚本

    scapy除了可以作为Python库被调用之外,也可以作为单独的工具使用,我们先来学习一下这个工具是怎么构造报文的。 kali中输入scapy我们就可以打开这个软件: ?...但这里发送的是个应答,目标主机不会回复报文,因此我们使用sendp(pkt)方式,根据二层发包,但不接收响应,wireshark抓如下: ?...先查看一下主机A的arp表: ? 发送ARP欺骗: ? //源IP修改为网关IP,源MAC默认为kali的MAC,目的IP修改为主机A的IP。 再次查看主机A的arp表项,欺骗成功: ?...通过wireshark抓发现kali发送欺骗时,先会自己发送一个arp报文去问谁是192.168.211.151,再发送欺骗: ?...当然也可以修改脚本,脚本中再发送target与ip调换的,这里就不演示啦~ 当达成ARP欺骗后,主机A的报文都会发到kali这里来,kali抓到后并不会转发出去,会导致主机A网,被用户发现。

    5.5K10

    网络是怎样连接的 第一、二章 笔记

    描述符,应用程序会将其存放在内存中 同一台计算机上可能同时存在多个套接,我们需要一种方法来识别出某个特定的套接,也就是描述符的作用 当创建套接字后,我们就可以使用这个套接来执行收发数据的操作...描述符是和委托创建套接的应用程序交互时使用的,并不是用来告诉网络连接的另一方的 如果说描述符是用来一台计算机内部识别套接的机制,那么端口号就是用来让通信的另一方能识别出套接的机制 通信阶段 发送...还包括ICMP协议和ARP协议 ICMP用于告知网络传送过程中产生的错误以及各种控制信息 ARP用于根据IP地址查询的 MAC地址 套接的实体就是通信控制信息 协议栈内部有一块用于存放控制信息的内存空间...ARP缓存的内存空间中 发送的时候,先查询一下ARP缓存没如果其中已经保存了对方的MAC地址,就不需要发送ARP查询,直接使用ARP缓存中的地址,而当ARP缓存中不存在时,发送ARP查询 ARP缓存中的值会在几分钟左右被删除...分片重组 接下来会被交给TCP模块,TCP模块会根据IP头部中的接收方和发送IP地址,一级TCP头部中的接收方和发送方端口来查找对应的套接 找到对应的套接之后,就可以根据套接中记录的通信状态

    81310

    【斯坦福计网CS144】Lab5终结笔记

    2 lab0、1、2、3、4中,我们编写了一个TCP实现,它可以成功地与使用TCP的任何其他计算机交换TCP段。但是,这些TCP段是如何传递到对等的TCP实体上的?...内核确保每个套接都有本地和远程地址、端口号的唯一组合。由于是内核将这些写入UDP和IP头,所以它可以隔离不同的应用程序。 (2)TCP-in-IP。...大部分的工作是为每个下一跳的IP地址查找(和缓存)以太网地址。这方面的协议被称为地址解析协议(ARP)。...第一种是TCP-in-UDP-in-IP,这是内核完成的任务,因此内核可以确保每个套接都具有本地地址与端口,以及远程地址与端口的唯一组合,同时能保证不同进程之前的隔离。...ARP 类似于 DNS 服务,但不同的是,DNS 为任何地方的主机来解析主机名,但 ARP 只能为同一个子网上的主机和路由器接口解析 IP 地址。

    18920

    lwip udp 发送_lwip udp发送

    然后构造UDP查找能够到达remote_ip的router接口,如果有必要,将该接口的本地ip作为UDP的src ip。...foreign_ip(*).foreign_port local_ip(*).local_port *.* UDP发送过程: 1.应用层:绑定UDP套接 我们必须先创建一个UDP套接,通过调用...ip_output()函数中,先给数据报文加上IP头部,然后比较目的IP地址与网络接口的IP地址是否同一网段,如果不是,就必须先把数据报文发送到网关,于是使用网关的IP地址作为目的主机,如果目的IP...接着调用arp_lookup()ARP缓存中查找目的主机的MAC地址,找到了调用ethernet_output()把数据报文传入到数据链路层发送,如果找不到,就调用arp_query()发送ARP请求解析目的主机的...udp_input()中提取数据报文的端口号,然后已登记的套接查找与该端口号符合的UDP接收函数,如果没有找到相应的套接,调用icmp_output()发送一个ICMP不可达报文,如果找到了,

    3.7K10

    网络编程初识和socket套接

    以太网头 ipip数据 ARP协议 arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到 通信是基于...mac的广播方式实现,计算机发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议 arp协议功能:广播的方式发送数据,获取目标主机的mac地址 协议工作方式:每台主机ip...以太网数据需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。...,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET) 套接使用 基于tcp协议的socket tcp是基于链接的必须先启动服务端再启动客户端去链接服务端...() 设置套接的阻塞与非阻塞模式 s.settimeout() 设置阻塞套接操作的超时时间 s.gettimeout() 得到阻塞套接操作的超时时间 面向文件的套接的函数 s.fileno()

    1K20

    网络是怎样连接的(二) -- 协议栈与网卡是如何工作的

    引言 上一篇文章中,我们介绍了浏览器是如何生成消息的: 网络是怎样连接的(一) -- 浏览器是如何工作的 浏览器生成消息以后,他就要通过调用 Socket 库中的系统调用,委托操作系统协议栈将消息发送出去了...创建套接 首先,浏览器要做的是调用 Sockect 库提供的 socket 系统调用,创建套接,那么,什么是 socket 呢?...通过 netstat 命令,可以查看每一个套接对应的具体控制信息,每个 socket 占用一行。 3....3.1 数据的发送 发送数据的步骤如下: 协议栈将收到的数据写入发送缓冲区; 协议栈根据 MTU(网络最大长度)减去头部长度,得到单个的长度,对缓冲区中的数据进行拆分,然后将拆分后的数据逐个发送,如果达到计时器时间缓冲区中仍然不足一个...IP 数据前,得到新的以太网发送出去,直到到达最终目的 ip 所在主机。

    1.2K40

    计算机网络基础常考面试题精华总结

    然后使用IP层的IP地址查找目的端。...3、客户端的网络层(添加IP头)不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器...4、客户端的链路层(添加MAC头)通过链路层发送到路由器,通过邻居协议查找给定 IP 地址的 MAC 地址,然后发送 ARP 请求查找目的地址,如果得到回应后就可以使用 ARP 的请求应答交换的 IP...每个 TCP 连接有且仅有两个端点,表示通信的双方,且双方在任意时刻都可以作为发送者和接受者。 什么是套接 一条 TCP 连接的两端就是两个套接。...套接 = IP 地址:端口号 因此,TCP 连接 = (套接1,套接2)= (IP1:端口号1,IP2:端口号2) 8.TCP对应的协议和UDP对应的协议 TCP对应的协议: (1) FTP:定义了文件传输协议

    63720

    一道腾讯面试题目:没有listen,能否建立TCP连接

    为了能够收到TCP的握手数据,可以尝试使用原始套接来接收IP报文,这样就可以应用层替代内核做TCP的三次握手了。这个想法不错,可惜现实比较残酷,七年前我已经试过这个方案了。...当没有对于TCP 套接处于listen状态时,使用raw socket处理握手报文时,即使收到了syn报文并给对端发送了syn+ack报文,也无法完成连接。因为内核一般会提前发送RST中断该连接。...内核ip_local_deliver_finish先将报文复制一份给原始套接,然后会继续后面的处理,进入tcp的接收函数tcp_v4_rcv。在这个函数中,要进行套接查找。 ?...在这个错误处理中,只要数据skb的校验和没错,内核就会调用tcp_v4_send_reset发送RST中止这个连接。因此,这个单独使用raw socket的方案是行不通的。...只不过限定了条件之后,我们需要确定2个事情: 与前面类似,如何避免内核发送RST。不能使用iptable的前提下,这意味着tcp_v4_rcv中,要能够找到对应的套接

    2K30

    网络嗅探器

    原理:   通常的套接程序只能响应与自己MAC地址相匹配的 或者是 广播形式发出的数据帧,对于其他形式的数据帧网络接口采取的动作是直接丢弃   为了使网卡接收所有经过他的封包,要将其设置成混杂模式,通过原始套接来实现...设置混杂模式:   创建原始套接,   绑定到一个明确的本地地址,   向套接发送SIO_RCVALL控制命令,   接收所有的IP 代码实现步骤:   1 创建原始套接   2 绑定到明确地址...主程序代码如下: void main() { //创建原始套接 SOCKET sRaw = socket(AF_INET,SOCK_RAW,IPPROTO_IP); //获取本地...(ETHERTYPE_IP)、ARP(ETHERTYPE_ARP)等 } ETHeader, *PETHeader; #define ARPHRD_ETHER 1 // ARP协议opcodes...ipLength; // 封包总长度,即整个IP报的长度 USHORT ipID; // 封包标识,惟一标识发送的每一个数据报 USHORT

    2K100

    python基础之socket编程

    由于IP协议使用ARP协议,所以经常把ARP协议划到网络层,但是ARP协议是为了从网络层使用IP地址解析出在数据链路层使用的MAC地址,所以有些地方也把ARP协议划分到数据链路层,但是一般情况下,我们还是把...() 设置套接的阻塞与非阻塞模式s.settimeout() 设置阻塞套接操作的超时时间s.gettimeout() 得到阻塞套接操作的超时时间面向文件的套接的函数s.fileno...例如基于tcp的套接客户端往服务端上传文件,发送时文件内容是按照一段一段的字节流发送的,接收方看了,根本不知道该文件的字节流从何处开始,何处结束 所谓粘问题主要还是因为接收方不知道消息之间的界限...不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接缓冲区)采用了链式结构来记录每一个到达的UDP每个UDP中就有了消息头(消息来源地址,端口等信息),...解决粘的low比处理方法 问题的根源在于,接收端不知道发送端将要传送的字节流的长度,所以解决粘的方法就是围绕,如何发送发送数据前,把自己将要发送的字节流总大小让接收端知晓,然后接收端来一个死循环接收完所有数据

    2.9K100

    Python网络编程(UDP和TCP)

    通信过程(复杂)  较为复杂的通信过程如:www.baidu.com  说明   浏览器中输入一个网址时,需要将它先解析出ip地址来当得到ip地址之后,浏览器以tcp的方式3次握手链接服务器以tcp的方式发送...用来指引数据的收发方向(相当于电脑的序列号)网络掩码:用来区分ip地址的网络号和主机号默认网关:当需要发送的数据的目的ip不在本网段内时,就会发送给默认的一台电脑,成为网关集线器:已过时,用来连接多态电脑...将string中的数据发送到连接的套接,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。...TCP服务器  Python程序中,如果要完成一个TCP服务器的功能,需要的流程如下:  1、socket创建一个套接。...ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于IPv6中代替地址解析协议。

    1.1K20

    网络是如何连接的?网络发展简介(四)

    socket是操作系统提供的TCP/IP的薄层封装,大大简化了TCP/IP使用 借助于socket通信的过程大致分为下面四个过程 创建套接 连接阶段 通信阶段 断开阶段 web服务器会先创建套接...有了下一跳IP地址,我们就可以查找他的物理地址,这样就可以获得下一个设备的MAC地址了 如何根据IP地址查询MAC地址呢?...如果存在等待连接的套接,则为这个套接复制一个新的副本,并将发送IP 地址、端口号、序号初始值、窗口大小等必要的参数写入这个套接中 同时分配用于发送缓冲区和接收缓冲区的内存空间。...,连接操作就完成了 TCP模块接收-传输 然后就是数据的传送阶段了 数据重复着上面的过程,TCP 模块会检查收到的对应哪一个连接 服务器端,可能有多个已连接的套接对应同一个端口号,因此仅根据接收方端口号无法找到特定的套接...简言之,发送IP 地址和接收方 IP发送方端口和接收方端口唯一确定一条连接(另外其实包含协议,应该是五个确定一条连接) 找到 4 种信息全部匹配的套接之后,TCP 模块会对比该套接中保存的数据收发状态和收到的

    4K50

    17 . Go之网络编程

    IP的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。...而以太网数据的”数据”部分,最长只有1500节。因此,如果IP数据超过了1500节,它就需要分割成几个以太网数据,分开发送了。...mac的广播方式实现,计算机发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议 arp协议功能:广播的方式发送数据,获取目标主机的mac地址 协议工作方式:每台主机ip...Socket又称“套接”,应用程序通常通过“套接”向网络发出请求或者应答网络请求,使主机间或者一台计算机的进程间可以通讯 类似于操作系统将复杂丑陋的控制计算机硬件的操作封装成统一简单的接口,只需要使用者学会如何操作系统就可以简单快速的操作计算机硬件...建立并绑定 Socket:首先服务端使用 socket() 函数建立网络套接,然后使用 bind() 函数为套接绑定指定的 IP 和端口; // 2.

    1K50

    网络协议

    一个路由式网络中,源地址主机向目标地址主机发送数据时,IP协议是如何将数据成功发送到目标主机上面的呢。...同网段的情况下,如果原地址和目标地址主机同一网段,ip地址会被ARP解析为MAC地址,然后根据MAC地址,源主机直接把数据发给主机。...为了节约网络资源,提高响应速度,每台主机都有一个ARP高速缓存,无需再发送ARP请求,从而节约了网络资源. 通过免费ARP是将目标ip是自己的ip地址的发送出去,有三个作用....为了区分同一台主机上面不同应用程序的数据,传输层提供了端口和套接.端口号用来识别应用程序. 套接socket,可以区分不同应用程序间的网络通讯和连接....多路复用:从源主机的不同套接中收集数据库,并且能为每个数据块封装首部信息,从而生成报文段,然后将报文段传递到网络层中. 多路分解,能把传输层报文段中的数据交付到正确的套接.

    56910
    领券