首页 > 编程语言 >[python] 使用nmap搜索主机及端口号:寻找宿舍路由

[python] 使用nmap搜索主机及端口号:寻找宿舍路由

时间:2023-10-16 22:14:21浏览次数:33  
标签:nm scan python ip list subprocess nmap 端口号

prologue

明明设置好了端口映射,但出来却发现无法远程连接宿舍的电脑,怀疑是路由器WAN网口地址变动

idea

很神奇的是原ip能ping通,不过也可能是被分配给其他宿舍,尝试了telnet,无果。上网搜索发现了netcat,又看到了nmap,似乎更合适

solution

安装好nmap,计划是先扫描主机,再扫描在线主机的23389端口

手动来肯定不现实,先是想到用subprocess:

import subprocess
import re


def scan_ip(net='172.17.174.0/24'):
  ret = subprocess.Popen(
    f'nmap -sP {net}',
    shell=True,
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    cwd='D:/Software/Web/Nmap',
    encoding='gbk',
  )
  # a = subprocess.run('nmap 10.132.4.190', shell=True, cwd='D:/Software/Web/Nmap')

  pattern = re.compile(r'^Nmap scan report for (\d+\.\d+\.\d+\.\d+)')
  ip_list = []
  for s in ret.stdout.readlines():
    m = pattern.match(s)
    if m is None:
      continue
    ip_list.append(m.groups()[0])
  return ip_list


def scan_port(ip, port=23389):
  ret = subprocess.Popen(
    f'nmap {ip} -p {port}',
    shell=True,
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    cwd='D:/Software/Web/Nmap',
    encoding='gbk',
  )


# ip_list = scan_ip('10.132.4.0/24')
ip_list = scan_ip()
print(ip_list)

突然想到说不定会有nmap的库,一搜还真有:pip install python-nmap,这下代码简洁多了:

import nmap

nm = nmap.PortScanner(('D:/Software/Web/Nmap/nmap', ))
PORT = 3389
nm.scan('10.132.4.0/24', str(PORT))
print(nm.command_line())
for host in nm.all_hosts():
  t = nm[host]['tcp'][PORT]
  print(f'{host}:{PORT} {t["state"]}@{t["reason"]}')

把原ip网段拿去检测,发现原ip就有23389,很可能没变,但一直显示 filtered,no-response 难道是防火墙?在命令行上直接操作也是差不多的结果:

nmap -sP 扫描网段筛选在线主机

nmap 扫描端口

epilogue

结果浪费一下午还是没能连上电脑,回宿舍。
补:结果是路由器的端口映射没写好,改完再扫就显示open了

标签:nm,scan,python,ip,list,subprocess,nmap,端口号
From: https://www.cnblogs.com/Stareven233/p/17762572.html

相关文章

  • 代码随想训练营第三天(Python) | 203.移除链表元素、707.设计链表、206.反转链表
    一、203.移除链表元素关键点:如何删除节点,需要知道删除节点前的节点。1、无虚拟头节点的方法classSolution:defremoveElements(self,head:Optional[ListNode],val:int)->Optional[ListNode]:whilehead!=Noneandhead.val==val:#如果头节点的值......
  • Python命令汇总
    类属 功能命令作用备注常用编码#-*-coding:GB2312-*- #-*-coding:utf-8-*- Cmd切换cd切换目录 返回cd..上层目录cd: /d d:   切换到当前目录下不用加/d读取dir读取目录读取当前目录下的文件信息新建mkdir()新建文件夹mkd......
  • python35days
    Socket抽象层(Socket编程)基于TCP协议的借助socket可以编程客户端和服务端的程序链接循环通信循环基于UDP协议的套接字(soket)编程粘包现象如何解决粘包现象struck模块的使用——————————————————————————————————————————......
  • python练习.1
    问:一颗球从100米处落下,每次弹起高度减半,问弹跳n次后的高度,路程defAyue():i=1num=100.0x=float(input("请输入你想要知道的弹跳次数:"))sum=100*(1/2)**(x)print(f"最后的高度为:{sum}")while(i<=x):num+=100*(1/2)*......
  • 盘点一个Python排序问题(下篇)
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【刘苏秦】问了一个Python数据排序处理的问题,一起来看看吧。data='a1,a1,c12,a0,b13,c13,a11,b5,a0,c8,c7,c6,c4'#待处理数据out='a0,a0,a1,a1,b13,c13,c12,a11,c8,c7,c6,b5,c4'#处理后数据,X0排第一,X1排第二,X13,X12,X11......
  • python学习之二位数组
    创建二维数组其实python没有数组的概念,是用list来代替的,创建其实可以直接写入行列式如下:也可以使用numpy,后面用到的话再写一篇运行结果如上从输入流写入数组目前只懂需要输入行跟列的二位数组,如果用到需要根据输入长度来判断的时候在补充 ......
  • Mac OS安装特定python版本
    在MacOS上安装特定版本Python的常用方式是使用pyenv版本管理器。以下是一些步骤:首先,你需要使用Homebrew来安装pyenv。在Terminal中输入以下命令:/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"然后安装pyenv:b......
  • python操作excel三大模块对比(xlrd、openpyxl、pandas)
    1.pandasmatplotlib、numpy、pandas是入行数据分析的三个必须掌握的基础模块,这里介绍一下用pandas如何导入excel文件。安装比较简单,直接用pip工具安装三个库即可,安装命令如下$pip3installpandas安装完成提示Successfullyinstalled即表示安装成功。#1.导入pandas模......
  • Playwright- python 快速开始
    Playwright模块提供了一种启动浏览器实例的方法。以下是使用Playwright驱动自动化的典型示例:fromplaywright.sync_apiimportsync_playwrightdefrun(playwright):chromium=playwright.chromium#or"firefox"or"webkit".browser=chromium.launch()pa......
  • python如何打包成应用
    使用pyinstall如何把python代码打包成exe可执行文件的步骤、并简要介绍打包原理,最后又介绍了一个简单用例和一个带客户端界面的用例。 简介:PyInstaller将Python应用程序及其所有依赖项捆绑到一个包中。用户无需安装Python解释器或任何模块即可运行打包的应用程序。PyInstal......