【Python安全编程】Python实现网络主机和端口扫描

这篇具有很好参考价值的文章主要介绍了【Python安全编程】Python实现网络主机和端口扫描。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文主要讲几个利用Python实现网络扫描的小例子,可以结合多线程或多进程编程改进实例

我曾经走过多遥远的路
跨越过多少海洋去看你

环境准备

  • Python3环境
  • scapy库
  • socket库
  • 能与物理机正常通信的虚拟机

由于本文实验目的为实现网络扫描,即探测网络中存活的主机,为了避免影响真实的网络环境,建议通过虚拟机进行实验,确保主机和虚拟机之间网络通信正常即可。
scapy库和socket库都可以通过pip命令直接安装:

pip install scapy

Python实现主机扫描

基于ARP协议

ARP协议这里不做过多讲解,大家自行百度即可,扫描目标主机的工作原理大致如下:

  • 首先向目标主机发送一个ARP Request请求
  • 若目标主机回应了ARP Reply,则表明目标主机可能存活
  • 若目标主机没有回应,则表明目标主机可能处于非活跃状态

需要注意的是,这里我们可以直接发送MAC地址全为F的广播报文,而不需要单独给每个IP主机发送数据包,这样能够极大的优化系统运行时间

实验代码

注意:由于我这里虚拟机在VMnet8虚拟网卡上,因此我们发送数据包的时候应该选择对应的网卡进行实验,windows下可以通过ipconfig /all命令查看对应网卡的名称和属性

from scapy.all import *

# 设置发送数据包的网卡
send_iface = "VMware Virtual Ethernet Adapter for VMnet8"

# 扫描IP地址范围
ip_range = "10.0.0.0/24"

# 发送ARP请求并获取响应
ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip_range), iface=send_iface, timeout=2)

# 打印响应结果
for snd, rcv in ans:
    print(f"{rcv.psrc} is up.")

代码执行结果:
【Python安全编程】Python实现网络主机和端口扫描
其中的10.0.0.171就是我开启的虚拟机,可以看到代码成功执行并扫描到了目标主机的IP地址

基于ICMP协议

基于ICMP协议的主机扫描原理类似,这里我们将需要对每个主机发送ARP请求报文

普通版本

常规书写的代码如下:

from scapy.all import *

# 输入需要扫描的IP地址范围
ip_range = '10.0.0.0/24'

# 输入需要发送数据包的网卡名
iface = "VMware Virtual Ethernet Adapter for VMnet8"

# 定义发送的ICMP数据包
packet = IP(dst=ip_range)/ICMP()

# 扫描IP地址范围段
ans, unans = sr(packet, iface=iface)

# 输出扫描结果
print("以下IP地址可用:")
for s, r in ans:
    print(r.sprintf("%IP.src%"))

由于遍历每个IP再发送ICMP请求包的方式速度较慢,在网络条件允许的情况下可以用多线程的方式改写上述代码

多线程版本
import threading
from scapy.all import *
import logging
#关闭warning警告信息
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

def scan(ip_list, iface):
    for ip in ip_list:
        pkt = IP(dst=ip)/ICMP()
        res = sr1(pkt, timeout=1, iface=iface, verbose=0)
        if res:
            print(f"{ip} is up")

def scan_ips(target_ips, iface, thread_count=10):
    ip_lists = [[] for _ in range(thread_count)]
    for i, ip in enumerate(target_ips):
        ip_lists[i % thread_count].append(ip)

    threads = []
    for ip_list in ip_lists:
        thread = threading.Thread(target=scan, args=(ip_list, iface))
        threads.append(thread)
        thread.start()

    for thread in threads:
        thread.join()

if __name__ == '__main__':
    ips = ["10.0.0.{}".format(i) for i in range(1, 201)]
    iface = "VMware Virtual Ethernet Adapter for VMnet8"
    scan_ips(ips, iface, thread_count=10)


执行该代码即可得到目标网段中存活的主机IP
【Python安全编程】Python实现网络主机和端口扫描

Python实现端口扫描

扫描单个端口

这里主要演示利用socket库进行端口扫描,这里利用虚拟机的22端口为例进行实验:

from socket import *

def portScanner(host, port):
	try:
		s = socket(AF_INET, SOCK_STREAM)
		s.connect((host,port))
		print('[*]',host,port,'open')
		s.close()
	except:
		print('[-]',host,port,'close')


portScanner('10.0.0.171',22)

【Python安全编程】Python实现网络主机和端口扫描

利用多线程扫描端口

利用多线程扫描端口的实例如下:

import socket
import threading

# 定义扫描函数
def scan_port(ip, port):
    try:
        # 创建套接字
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(1)
        # 连接目标主机的指定端口
        result = sock.connect_ex((ip, port))
        if result == 0:
            print(f"Port {port} is open on {ip}")
        # 关闭套接字
        sock.close()
    except Exception as e:
        print(e)
        pass

# 定义多线程扫描函数
def scan_thread(ip, start_port, end_port):
    for port in range(start_port, end_port):
        scan_port(ip, port)

# 主函数
if __name__ == '__main__':
    # 设置要扫描的主机和端口范围
    target_host = '10.0.0.171'
    start_port = 1
    end_port = 65536

    tpool=[]

    # 创建多个线程进行扫描
    for i in range(start_port-1, (end_port+1)//100):
        t = threading.Thread(target=scan_thread, args=(target_host, i*100+1, (i+1)*100))
        t.start()
        tpool.append(t)
    for t in tpool:
        t.join()

运行效果:
【Python安全编程】Python实现网络主机和端口扫描

后记

以上就是本文的全部内容,若有疑问欢迎评论留言或与我联系~文章来源地址https://www.toymoban.com/news/detail-505514.html

到了这里,关于【Python安全编程】Python实现网络主机和端口扫描的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 端口扫描-安全体系-网络安全技术和协议

    全TCP连接:三次握手 半打开式扫描:前两次握手 FIN扫描:不用建立TCP连接 第三方扫描: 拒绝服务攻击有: 同步包风暴 ICMP攻击 SNMP攻击 都是修改注册表来防御攻击 考察这三种拒绝服务攻击的原理 a 由低到高,一共五个等级 自主保护级 系统审计保护级:粒度更细的自主保护级 安全标

    2024年02月09日
    浏览(45)
  • 网络安全02-C段扫描、开放端口

    2024年02月11日
    浏览(38)
  • 详解【计算机类&面试真题】军队文职考试——第8期:OSI的七层模型 | 数据通信的三种方式 | 通信网络的检查方法,附Python进行网络连通性检查、带宽测试、端口扫描、链路质量测试、安全性扫描

      不知道命运是什么,才知道什么是命运。———史铁生     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[3] 阿里云社区特邀专家博主🏅   🏆[4] CSDN-人工智能领域优质创作者🏆

    2024年01月25日
    浏览(55)
  • Nmap扫描器主机、端口、版本、OS、漏洞扫描基本用法

    操作系统:kali 1、批量Ping扫描:  批量扫描一个网段的主机存活数。 扫描IP地址范围:  可以指定一个IP地址范围   2、跳过Ping探测:   有些主机关闭了ping检测,所以可以使用 -P0 跳过ping的探测,可以加快扫描速度。 3、计算网段主机IP  -sL      仅列出指定网段上的每台主机,不

    2024年02月11日
    浏览(56)
  • 主机探测与端口扫描-渗透测试模拟环境(2)

    本篇将介绍主机探测与端口扫描渗透模拟环境下整理的各类收集方法、各类工具技术使用的演示,阅读后可用在工作上 。 往期系列文章: 渗透攻防环境搭建与攻防知识体系思维导图 渗透模拟环境配置和工具介绍-渗透测试模拟环境(0)_luozhonghua2000的博客-CSDN博客 外围信息搜集

    2024年02月06日
    浏览(42)
  • Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现

    Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现 IP(Internet Protocol) 地址是唯一标识互联网上连接至计算机或其他设备的地址。每一个设备在 IP 网络中拥有一个不同的 IP 地址,它由 32 位二进制数组成,通常表示为四个从 0 到 255 的十进制数之间用 (.)

    2024年02月04日
    浏览(65)
  • 网络扫描,端口扫描,漏洞扫描,带你认识nmap

    nmap是一款用于网络发现和安全评估的开源工具。它可以扫描网络主机,了解主机的开放端口和服务信息,甚至可以对操作系统进行识别。 以下是nmap主要用途: 网络发现:nmap可以扫描网络上的主机,了解主机的IP地址、MAC地址等信息。 端口扫描:nmap可以扫描网络上的主机,

    2024年02月13日
    浏览(48)
  • 扫描网络端口

         本次实验通过在理解扫描器原理的基础上,利用Java开发环境来编程实现一款简易的扫描器,熟悉主机及端口扫描工具。       编写程序扫描网络端口,查看状态 -- 关闭或者开启,同时要设置端口关闭或者开启功能,并且能够扫描到开启或者关闭的端口。 1. 端口介绍

    2024年02月02日
    浏览(28)
  • 安全开发实战(3)--存活探测与端口扫描

    目录 安全开发专栏 前言 存活探测 端口扫描 方式一: 1.3.1 One 1.3.2 Two 1.3.3 批量监测 方式二: 1.3.1 One 1.3.2 Two 1.3.3  Three 1.3.4 扫描ip地址,提取出开放端口和协议  ​编辑 1.3.5 批量扫描(最终完成版) 总结                                                              安全开

    2024年04月22日
    浏览(32)
  • nodejs开发 | 安全工具端口扫描器

    今天分享一个nodejs的demo,可以扫描出指定IP的端口开放情况。 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包