扫描器篇(五)之scapy构造UDP数据包完成主机发现
udp协议扫描
发现原理
向目标主机发送一个,没有开放的端口发送数据,目标主机会返回一个ICMP 目标端口不可达的消息,通过该特征可以对主机进行判断是否在线
注意事项
如果目标主机端口不在线,或者在线且目标端口为开放状态,那么发送出去的UDP数据包不会收到任何回复
判断条件
以返回包中的ip部分proto参数的值作为判断条件,确定目标主机是否返回ICMP消息,原理是ip包头中的protocol部分用于标记上层协议类型,如果数值为0x01的话表示ICMP
代码部分
- 数据包构造扫描部分
通过python发包神器scapy构造UDP数据包
端口一定要选择没有开放的,不然会扫描不到主机
def scan(ip):try: # 端口要求一定是没开放packet = IP(dst=ip)/UDP(dport=56789)result = sr1(packet,timeout=0.5,verbose=0)#result.show()if int(result[IP].proto) == 0x01: # 0x01 代表的ICMP字段值time.sleep(0.1)print(ip + ' ' + "on line")except:return
- 参数获取部分
通过optparse模块接收用户提供的参数,判断是扫描整个网段还是读取ip地址文件
获取到地址后再通过Thread多线程去发送数据包
def main():# 生成帮助信息,以及接收用户输入的参数,并建立对象usage = "Usage: arp扫描.py -f <filename> -i <ip address>"parse = OptionParser(usage=usage)parse.add_option("-f", "--file", type="string", dest="filename", help="specify the IP address file")parse.add_option("-i", '--ip', type="string", dest="address", help="specify the IP address")(option, args) = parse.parse_args()filename = option.filenameaddress = option.address# 判断是不是地址文件if filename:if not os.path.exists(filename): #判断文件是否存在print("The file does not exist. Please enter it again")sys.exit() with open(filename, "r") as f: #读取文件for i in f.readlines():ip = i.strip()t = Thread(target=scan, args=(ip,))t.start()# 判断是不是整个网段if address:prefix = address.split(".")[0] + '.' + address.split(".")[1] + '.' + address.split(".")[2] + "." # 将用户输入的地址以.作为分隔符for i in range(0, 255): ip = prefix + str(i) #构造扫描整个网段所需ipt = Thread(target=scan, args=(ip,))t.start()
整体代码
import os
import time
from optparse import OptionParser
from scapy.all import *def scan(ip):try:packet = IP(dst=ip)/UDP(dport=56789)result = sr1(packet,timeout=0.5,verbose=0)#result.show()if int(result[IP].proto) == 0x01: # 0x01 代表的ICMP字段值time.sleep(0.1)print(ip + ' ' + "on line")except:returndef main():# 生成帮助信息,以及接收用户输入的参数,并建立对象usage = "Usage: arp扫描.py -f <filename> -i <ip address>"parse = OptionParser(usage=usage)parse.add_option("-f", "--file", type="string", dest="filename", help="specify the IP address file")parse.add_option("-i", '--ip', type="string", dest="address", help="specify the IP address")(option, args) = parse.parse_args()filename = option.filenameaddress = option.address# 判断是不是地址文件if filename:if not os.path.exists(filename): #判断文件是否存在print("The file does not exist. Please enter it again")sys.exit()with open(filename, "r") as f: #读取文件for i in f.readlines():ip = i.strip()t = Thread(target=scan, args=(ip,))t.start()# 判断是不是整个网段if address:prefix = address.split(".")[0] + '.' + address.split(".")[1] + '.' + address.split(".")[2] + "." # 将用户输入的地址以.作为分隔符for i in range(0, 255): ip = prefix + str(i) #构造扫描整个网段所需ipt = Thread(target=scan, args=(ip,))t.start()if __name__ == '__main__':main()
运行效果
扫描器篇(五)之scapy构造UDP数据包完成主机发现相关推荐
- 判断端口是否能用_扫描器篇(八)之python+scapy构造TCP协议包扫描主机端口
TCP协议端口扫描 要使用TCP协议去完成端口扫描,肯定是需要了解TCP协议通信过程和原理才能完成的 TCP协议的特点 1 面向连接的:使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写, ...
- 如何在Linux命令行下发送和接收UDP数据包
众所周知,在传输层有两个常用的协议 TCP 和 UDP,本文介绍在 Linux 命令行下,如何使用 nc 命令发送或接收 UDP 数据包,这些命令的用法对调试 UDP 通信程序将有所帮助. 1. 问题 ...
- 【KALI使用】17 主动信息收集——四层发现(TCP、UDP、使用 scapy 定刢数据包迕行高级扫描)
目录 四层发现优缺点 TCP发现 使用 scapy 定刢数据包迕行高级扫描--发送3.4层组合包头 长组合语句 python脚本 UDP 脚本 总结: 只是记录 学习笔记 参考:这个 四层发现优缺点 ...
- 【Socket网络编程】7.以太网数据包、IP数据包、UDP数据包
以太网数据包.ip数据包.udp数据包 搭配这篇博文服用,效果更好:数据封装 和 数据拆封:https://blog.csdn.net/u011754972/article/details/11794 ...
- Linux内核网络协议栈:udp数据包发送(源码解读)
<监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...
- linux 内核 发送数据,使用Linux内核模块发送的UDP数据包不使用套...
您不需要套接字就可以在内核中发送UDP数据包,只需分配一个skb,自己构造IP报头和UDP报头,最后通过dev_queue_xmit()将其发送出去. skb = alloc_skb(len, GFP ...
- 教你动手写UDP协议栈 - UDP数据包解析<1>
前景 为啥要自己写一个mini UDP的协议栈?因为我们干偷偷摸摸的事情,哈哈哈!!! 其实是为了不跑一个庞大的LWIP协议栈,通过自己写的mini udp协议栈截取数据包给设备升级.这样节省了很多资 ...
- linux内核丢弃udp报文,c++ Linux UDP数据包丢失的原因
我有一个 Linux C应用程序接收有序的UDP数据包.由于排序,我可以很容易地确定数据包何时丢失或重新排序,即当遇到"间隙"时.该系统具有处理差距的恢复机制,但最好避免出现差距. ...
- 以太网,IP,TCP,UDP数据包分析【转】
原文地址:http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html 1.ISO开放系统有以下几层: 7 应用层 6 表示层 5 ...
- qt定时连续发送udp数据包_TCP和UDP
首先强调一点,TCP/IP协议是一个协议簇.里面包括很多协议的,UDP只是其中的一个, 之所以命名为TCP/IP协议,因为TCP.IP协议是两个很重要的协议,就用他两命名了. 两个协议的区别实际使用时 ...
最新文章
- Linux修改密码是提示“passwd: 鉴定令牌操作错误”问题的处理办法
- 不懂技术的人请不要对懂技术的人说这很容易
- Truncate a string
- 交换机背板带宽公式计算
- linux php curl 安装包下载,linux中php如何安装CURL扩展方法
- c# 多态实现_虚方法
- OpenCV笔记(Size)
- JSP中四种传递参数的方法
- “京东小贷” 注册资本由30亿元增至50亿元,恭喜
- Struts2请求处理的内部流程说明(版本二)
- java里上下文对象,java-在百里香模板中的Web上下文对象上发出...
- 【幽默】工作搞不好的原因
- mysql字符串区分大小写的问题
- mysql中如何创建数据库_Mysql 中如何创建数据库和数据表
- cmd 获取ftp没反应_python笔记13-执行cmd指令
- 最短路径算法之四——SPFA算法
- 光伏蓄电池单相并网模型。光伏+MPPT+boost升压电路+桥式逆变 带参考文件,模型说明文件
- excel打不开_卸载WPS以后为什么无法打开一个新建的Excel工作簿了
- 新华系“雄文”为何引发游戏产业3000亿市值蒸发?
- 跟着实训团初学HTML的第一天