来源:编程技术世界
大家都学过网络编程吧?
socket->bind->listen->accept->recv/recvfrom->send/sendto
一口气,什么select、poll、epoll复用模型一应俱全.
这套东西只是为了开发建立在传输层TCP和UDP上的应用程序。
你有没有想过如何通过编程方式批量发送一批TCP SYN握手包进行端口扫描?
如何编程发送带有伪造IP地址的ARP包和IP数据包?
甚至,如何编程发送带有伪造MAC地址的以太网数据帧?
一旦掌握了以上技巧,玩数据包就不是问题了,开发各种神器也不是问题。但它必须以正确的方式使用。不要给监狱编程~
如何构造和发送各种数据包呢?今天给大家介绍一个强大的小工具:scapy
这是一个强大的数据包构建工具,你可以在Python中使用它,是时候喊出:Python大法完成了!
ARP
我们使用ARP。 ARP 是一种地址解析协议。局域网中的通信需要使用网卡的MAC地址,而网络层的通信则使用IP地址。在数据包发出之前,在IP包前面添加以太网帧头时,需要填写接收者的MAC地址。如果是内部局域网通信,则接收地址是目标计算机网卡的MAC地址,如果是Internet上的公网IP地址,则接收地址是网关的MAC地址。
不管怎样,你得有一个MAC地址,那怎么得到呢?这就是 ARP 协议所做的。它可以将 IP 地址转换为 MAC 地址。
ARP解析的过程这里不详述。简单来说,比如查询192.168.1.100的MAC地址,主机使用ARP协议在局域网内发出广播:192.168.1.100,我叫你你敢答应吗?
局域网内的每个人都能收到这个广播(因为它的接收者MAC地址是FF-FF-FF-FF-FF-FF),但是只有IP地址为192.168.1.100的那家伙才会回复:爷爷来了!我的 MAC 地址是 xxxxxx。
注意,我们平时与应用程序通信时,上述过程都是由操作系统底层协议栈自动完成的,我们的应用程序无法感知这些。
我们可以使用 Scapy 库来启动 ARP 分析。
以上代码通过scapy库中的srp函数发送一个以太网帧,接收者为ff:ff:ff:ff:ff:ff,说明这是一个广播包,链接在上面layer是ARP协议,需要解析的IP是传入的要解析的IP地址参数。
上述函数一旦执行,就可以在wireshark中抓取数据包了:
如上所说,正常情况下,只有目标地址是我查到的主机。会回复我。
但是如果你局域网有人恶意,请在真正的主人面前回答我:爷爷来了!我的 MAC 地址是 yyyyyy。
那东西不好,下面的通讯信息是发给这个冒牌货的,这就是大名鼎鼎的ARP欺骗攻击!
再试一次,如果你查询的IP地址是网关的IP地址,后果更严重。所有网络通信都发送给这个人。
既然可以发送ARP查询报文,就可以改一下上面的代码,自然就可以发送ARP响应报文了……
ARP的故事就到此为止,让我们继续再看看,使用scapy作为端口扫描器。
端口扫描
TCP端口扫描,通过发送三次握手的第一个SYN包,根据返回结果判断端口的开放状态:
如果返回ACK+SYN,即flags字段为18,则端口打开:
如果返回ACK+RST,即flags字段为20,则端口关闭:
可以实现如下功能:
看抓包:
握手包和服务器的返回包可以清晰的看到。如果在循环中不断调用该函数并传入不同的端口,则可以实现批量端口扫描。 .
Scapy 构建数据包的能力只是冰山一角。更多强大功能等你研究。
学习计算机网络,不要仅仅停留在看书和博文的基础上,如果你能自己编程发送和接收数据包,实现ARP、ICMP、DHCP的功能, DNS,或者开发一些简单的网络工具,绝对比别人掌握的更深刻。
介绍一个非常经典的入门PDF。它解释了程序员必须知道的硬核基础知识。看完之后,可以对计算机有一个基本的了解和入门。是来训练你的??以此为基础,我们来看目录大纲
文章来源:《电脑编程技巧与维护》 网址: http://www.dnbcjqywh.cn/zonghexinwen/2021/0625/1186.html
电脑编程技巧与维护投稿 | 电脑编程技巧与维护编辑部| 电脑编程技巧与维护版面费 | 电脑编程技巧与维护论文发表 | 电脑编程技巧与维护最新目录
Copyright © 2018 《电脑编程技巧与维护》杂志社 版权所有
投稿电话: 投稿邮箱: