文章目录

  • 使用scapy模块构造icmp数据包探测
    • 0x01 模块安装
    • 0x02 scapy模块学习笔记
    • 0x03 脚本编写
  • 使用nmap模块扫描
    • 0x01 下载nmap模块和nmap安装包
    • 0x02 nmap模块学习笔记
    • 0x03 脚本编写

使用scapy模块构造icmp数据包探测

0x01 模块安装

这里要用到scapy,所以要先安装pip install scapy,后来遇到如下报错:

ValueError: Unknown pypcap network interface '\\Device\\NPF_Loopback'

上网搜了下,在windows上运行scapy还需要安装npcap

于是下载npcap,地址:https://nmap.org/npcap/windows-10.html

0x02 scapy模块学习笔记

1. 生成数据包

生成一个发往192.168.8.1的数据包

ip = IP(dst="192.168.8.1")

Scapy采用分层的形式来构造数据包,通常最下面的一个协议为Ether,然后是IP,在之后是TCP或者UDP。例如:

数据包 例子
HTTP Ether()/IP(dst=“www.baidu.com”)/TCP()/“GET /index.html HTTP/1.0 \n\n”
ARP Ether()/ARP(pdst=“192.168.8.12”)
ICMP IP(dst=“192.168.8.12”)/ICMP()
TCP tcp=IP(dst=“192.168.8.12”)/TCP(dport=80,flags=“S”)

生成HTTP包:IP() / TCP() / "GET/HTTP/1.0\r\n\r\n"
生成一个icmp数据包:IP(dst=ip, ttl=64, id=ip_id) / ICMP(id=icmp_id, seq=icmp_seq) / b'rootkit'

2. 发送数据包

scapy中一共有六个发送数据包的函数,理解起来记忆很容易

第一组为sr()、sr1()、send(),其中s代表send,r代表receive,sr1()中的1代表接受一个数据包,sr()接受所有数据包,send()只发送不接收。这组函数工作在第三层

第二组为srp(),srp1(),sendp(),每个都在前一个的基础上加了一个p,代表只发送第二层的包

sr()接受所有包需要两个参数

>>> anx,unans=sr(IP(dst="192.168.8.1")/ICMP())
Begin emission:
Finished sending 1 packets.
...*
Received 4 packets, got 1 answers, remaining 0 packets
#############################################
Received表示接收到的数据包数量
answers表示目标应答数据包
通过2个参数保存sr返回值
一个是发出的数据包,一个是接收的数据包
anx,unans=sr(IP(dst="192.168.43.135")/ICMP())
通过anx.summary()查看两个包的内容

sr1()只接收一个包,一个参数就够了

>>> packet=sr1(IP(dst="192.168.8.1")/ICMP())
Begin emission:
Finished sending 1 packets.
...*
Received 4 packets, got 1 answers, remaining 0 packets

0x03 脚本编写

果然安装好之后就没有报错了,脚本如下:

#!/usr/bin/python
# coding:utf-8
from scapy.all import *
from random import randint
from argparse import ArgumentParserdef Scan(ip):ip_id = randint(1, 65535)icmp_id = randint(1, 65535)icmp_seq = randint(1, 65535)packet = IP(dst=ip, ttl=64, id=ip_id) / ICMP(id=icmp_id, seq=icmp_seq) / b'rootkit'result = sr1(packet, timeout=1, verbose=False)if result:for rcv in result:scan_ip = rcv[IP].srcprint(scan_ip + '--->' 'Host is up')else:print(ip + '--->' 'host is down')def scan(ip):ip_id = randint(1, 65535)icmp_id = randint(1, 65535)icmp_seq = randint(1, 65535)packet = IP(dst=ip, ttl=64, id=ip_id) / ICMP(id=icmp_id, seq=icmp_seq) / b'rootkit'result = sr1(packet, timeout=1, verbose=False)if result:for rcv in result:scan_ip = rcv[IP].srcprint(scan_ip + '-->' 'host is up')else:print(ip + 'host is down')def main():parse = ArgumentParser()parse.add_argument("-u", "--url", dest="url", type=str, help="要转换为域名的ip")url = parse.parse_args().urlprint("Scan report for " + url.strip() + "\n")if '-' in url.strip():for i in range(int(url.strip().split('-')[0].split('.')[3]), int(url.strip().split('-')[1]) + 1):Scan(url.strip().split('.')[0] + '.' + url.strip().split('.')[1] + '.' + url.strip().split('.')[2] + '.' + str(i))time.sleep(0.2)else:Scan(url.strip())print("\nScan finished!....\n")if __name__ == "__main__":try:main()except KeyboardInterrupt:print("interrupted by user, killing all threads...")

这里我们用的是python的scapy模块来向目标发送icmp数据包,通过有无应答来判断目标主机是否开启

使用nmap模块扫描

0x01 下载nmap模块和nmap安装包

安装nmap模块(注意不是nmap是python-nmap)

pip install python-nmap

安装最新版nmap
https://nmap.org/dist/nmap-7.80-setup.exe

0x02 nmap模块学习笔记

这一部分学习自:https://blog.csdn.net/qq_36119192/article/details/83717690

portScanner()类

portScanner()类用于实现对指定主机进行端口扫描

nmScan=nmap.PortScanner()  #实例化

scan( host , port , args ) 方法:以指定方式扫描指定主机或网段的指定端口

参数:

  • host : 要扫描的主机或网段,可以是一个单独的ip:192.168.10.10 ;也可以是一个小范围网段:192.168.10.10-20 ;也可以是一个大网段:192.168.10.0/24
  • port : 可选参数,要扫描的端口,多个端口用逗号隔开,如:20,21,22,23,24
  • args :可选参数,要扫描的方式
import nmap
nm = nmap.PortScanner()
nm.scan('192.168.8.1-100', '22,21','-sV')也可以这样
nm.scan(hosts='192.168.1.0/24', arguments='-n -sP -PE -PA21,23,80,3389')

command_line() 方法:返回的扫描方法映射到具体的nmap命令行,也就是我们上面执行的nm.scan()命令,对应的具体的nmap的命令

import nmap
nm = nmap.PortScanner()
nm.scan('192.168.8.1-100', '22,21','-sV')
a=nm.command_line()
print(a)
###########################
nmap -oX - -p 20,21 -sV 192.168.125.134

scaninfo() 方法:返回nmap扫描信息,格式为字典类型

import nmap
nm = nmap.PortScanner()
nm.scan('192.168.8.11-100', '22,21','-sV')
a=nm.scaninfo()
print(a)
###########################
{'tcp': {'services': '20-21', 'method': 'syn'}}

all_hosts() 方法:返回nmap扫描的主机清单,格式为列表类型


```python
import nmap
nm = nmap.PortScanner()
nm.scan('192.168.10.10-12', '22,21','-sV')
####################################################
['192.168.10.10','192.168.10.11','192.168.10.12']

0x03 脚本编写

# -*- coding: utf-8 -*-
import nmap
import optparsedef NmapScan(targetIP):nm = nmap.PortScanner()try:result = nm.scan(hosts=targetIP, arguments='-sn -PE')state = result['scan'][targetIP]['status']['state']print("[{}] is [{}]".format(targetIP, state))except Exception as e:passif __name__ == '__main__':parser = optparse.OptionParser('usage: python %prog -i ip \n\n''Example: python %prog -i 192.168.1.1[192.168.1.1-100]\n')parser.add_option('-i', '--ip', dest='targetIP', default='192.168.1.1', type='string', help='target ip address')options, args = parser.parse_args()if '-' in options.targetIP:for i in range(int(options.targetIP.split('-')[0].split('.')[3]), int(options.targetIP.split('-')[1]) + 1):NmapScan(options.targetIP.split('.')[0] + '.' + options.targetIP.split('.')[1] + '.' +options.targetIP.split('.')[2] + '.' + str(i))else:NmapScan(options.targetIP)

使用

十一 使用python的scapy和nmap模块进行主机存活探测相关推荐

  1. 利用ICMP协议,使用python原始套接字实现主机存活探测工具

    一.课题概述. 一学期一次的课程设计终于开始了(停课两周,马上放寒假了,哈哈哈哈哈哈...)这次我们课程设计的科目是计算机协议,我们小组抽到的题目是利用ICMP模仿ping命令写一个主机存活探测的工具 ...

  2. Python中Scapy网络嗅探模块的使用

    目录 Scapy scapy的安装和使用 发包 发包和收包 抓包 将抓取到的数据包保存

  3. [批量主机存活扫描工具scanhost]扫描主机存活[python版本,非nmap版本]

    地址: http://blog.csdn.net/hujkay 作者:Jekkay Hu(34538980@qq.com) 关键词:主机扫描,主机存活,纯python版本,非nmap 时间: 2014 ...

  4. 使用python的scapy库,提供一个可用的通过nbns获取主机名称的示例代码

    以下是使用python的scapy库通过NBNS获取主机名称的示例代码: from scapy.layers.inet import IP, UDP from scapy.layers.dns imp ...

  5. python扫描器_7.python实现高效端口扫描器之nmap模块

    对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块. 本片文章主要介绍nmap模块的两个常用类: PortScanner()类,实现一个nma ...

  6. 7.python实现高效端口扫描器之nmap模块

    对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块. 本片文章主要介绍nmap模块的两个常用类: PortScanner()类,实现一个nma ...

  7. python nmap模块详解_python中的Nmap模块问题

    我已经安装了nmap.exe文件以及nmap模块.但我不确定如何配置nmap路径. 输入nmap路径的代码块如下所示class PortScanner(object): ""&qu ...

  8. 使用python调用nmap模块实现端口扫描

    使用python调用nmap模块实现端口扫描 安装python-nmap模块 pip3 install python-nmapPortScanner()类,实现一个nmap工具的端口扫描功能封装; 代 ...

  9. python时间戳_Python-强大的模块功能库-No11

    <Python真好玩,教孩子学编程>小挑战[转载] 第十一章,强大的模块功能库书籍<Python真好玩,教孩子学编程> 书中详细充实地讲解了模块和命名空间,和通过Python在 ...

最新文章

  1. cannot find package “github.com/json-iterator/go“cannot find package “github.com/modern-go/reflect2“
  2. 用python操作mysql数据库(之“更新”操作)
  3. C++实现Hash表
  4. mysql case break_按月转移日志表中日志时,mysql总是报‘MySQL server has gone away’这样的错!...
  5. sql横着连接起来sql_SQL联接的简要介绍(到目前为止)
  6. leetcode 649. Dota2 参议院(贪心算法)
  7. Leetcode016 3Sum Closest
  8. Java学习路线,你值得了解
  9. 异步处理老司机:IntentService 源码分析
  10. 马尔科夫链(Markov Chain, MC)算法详解及Python实现
  11. 使用Python把BT种子转化为磁力链接
  12. 使用Photoshop画一个圆锥体
  13. windows 7编辑启动菜单 bcdedit linux,bcdedit用法详解 windows7/vista启动修改
  14. 找出列表中最大或最小的元素-python3
  15. oCPC实践录 | 摸石头过河,oCPC先跑起来再说
  16. [Jupyter Notebook]导出好看的中文PDF
  17. twitter全自动发推_如何阻止Twitter视频自动播放
  18. 微信运动刷步教程 QQ健康刷步数(一)之安卓版本 - 乐运动
  19. 「实验性讲稿」载谭 Binomial Sums 详解
  20. Visual Studio 2019 下载地址

热门文章

  1. Delphi TStringGrid 类(1)
  2. pdf转换器免费注册码
  3. eclipse百度云下载,通史还有汉化包
  4. 太赫兹芯片是什么原理_太赫兹收发芯片、收发方法及其成像探测系统与流程
  5. rdd数据存内存 数据量_超全spark性能优化总结
  6. IT部门应如何制定技术路线图
  7. 局域网连接sql--SQL Server 2008
  8. java 当前时间 转换成 农历(阴历)时间
  9. C语言题目:韩信点兵
  10. 华为硬件工程师手册_一名电子工程师该如何打开正确的摆摊姿势?