ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于python的端口扫描

2022-07-26 10:31:17  阅读:170  来源: 互联网

标签:基于 端口扫描 ip 端口 python import port nmap


 

前言

端口扫描,就是逐个对一段端口或指定的端口进行扫描。通过扫描结果可以知道一台计算机上都提供了哪些服务,然后就可以通过所提供的这些服务的己知漏洞就可进行攻击。其原理是当一个主机向远端一个服务器的某一个端口提出建立一个连接的请求,如果对方有此项服务,就会应答,如果对方未安装此项服务时,即使你向相应的端口发出请求,对方仍无应答,利用这个原理,如果对所有熟知端口或自己选定的某个范围内的熟知端口分别建立连接,并记录下远端服务器所给予的应答,通过查看一记录就可以知道目标服务器上都安装了哪些服务,这就是端口扫描,通过端口扫描,就可以搜集到很多关于目标主机的各种很有参考价值的信息。例如,对方是否提供FTP服务、WWW服务或其它服务。

端口扫描的工具:

Nmap

Nmap -p -sV  ip   通过nmap 进行端口扫描

 

 

 如上图所示,开放端口 22 80 111 57695

 

如果不是内网靶机,推荐在线端口扫描工具

https://www.qtool.net/port

 

 

 

在线扫描不会暴露自己的IP地址安全。

Python是实现端口扫描

基于python-nmap模块的端口扫描

注意:如果采用windows系统,安装nmap模块 安装 python-nmap模块

import nmap

def NmapScan(targetIP, targetPort):

       nm = nmap.PortScanner()

       try:

              result = nm.scan(hosts=targetIP, arguments='-p'+targetPort)

              for i in targetPort.split(','):

                     i=int(i.strip())

                     port_infor = result['scan'][targetIP]['tcp'][i]

                     print("[{}] : [{}]".format(i, port_infor['state'] ))

       except Exception as e:

              print(e)

NmapScan("192.168.159.130",'80,48,445,20')
View Code  

基于socket的端口扫描

加入了线程

 

from os import name

import threading

from socket import *

import tqdm                                 # 进度条,可自行加上

 

lock = threading.Lock()                     # 确保 多个线程在共享资源的时候不会出现脏数据

openNum=0                                   # 端口开放数量统计

threads=[]                                  # 线程池

 

def portscanner(host,port):

    global openNum

    try:

        s=socket(AF_INET,SOCK_STREAM)

        s.connect((host,port))

        lock.acquire()

        openNum+=1

        print(f"{port} open")

        lock.release()

        s.close()

    except:

        pass

 

def main(ip,ports=range(65535)):            # 设置 端口缺省值0-65535

    setdefaulttimeout(1)

    for port in ports:

        t=threading.Thread(target=portscanner,args=(ip,port))

        threads.append(t)

        t.start()

    for t in threads:

        t.join()

    print(f"PortScan is Finish ,OpenNum is {openNum}") 

 

if __name__ == '__main__':

    ip='10.0.11.11'

    # main(ip,[22,101,8080,8000])          # 输入端口扫描

    main(ip)                               # 全端口扫描
View Code

 

标签:基于,端口扫描,ip,端口,python,import,port,nmap
来源: https://www.cnblogs.com/cx-ajun/p/16519984.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有