linux下快速列出局域网中所有主机名(计算机名)的脚本

最近有列出局域网中所有主机名的需求(SMB协议里的),但是findsmb命令总是列不全,搜了搜网上也没什么现成的解决方案,于是自己写了个python脚本

脚本会扫描局域网arp表中所有ip,并尝试解析其主机名,这样可以较为彻底地列出相关信息。

注意,运行这个脚本需要samba-common-bin和arp-scan这两个包,没有的请先apt install它们。

用法:直接运行或用python3运行,然后输入需要扫描的网卡名(network interface)(不知道的运行ifconfig可查,一般是ens33、eth0等,出现在该命令输出最左列),然后回车等待,可能需要运行几分钟。

需要root权限运行!!

#!/usr/bin/env python3

import os

def shellrun(cmd):
    a = os.popen(cmd)
    b = a.read()
    c = b.split('\n')
    return c

def cutarpresult(lst):
    a = []
    b = []
    for line in lst[2:]:
        if line != '':
            a.append(line)
        else:
            break
    for line in a:
        b.append(line.split('\t')[0])
    return b

def commandmaker(ip):
    return 'nmblookup -A ' + ip

def getrst(iplist):
    rst = []
    for ip in iplist:
        rst.append(shellrun(commandmaker(ip)))
    return rst

def washrst(rst):
    rtn = []
    for line in rst:
        if line[1].split(' ')[1] != 'reply':
            rtn.append(line[:-1])
    return rtn

def main():
    interface = input('which interface to use: ')
    iplist = cutarpresult(shellrun('arp-scan -I ' + interface + ' -l'))
    for rs in washrst(getrst(iplist)):
        for line in rs:
            print(line)

if __name__ == '__main__':
    main()

到此这篇关于linux下快速列出局域网中所有主机名(计算机名)的脚本的文章就介绍到这了,更多相关linux 列出局域网中所有主机名内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Linux修改主机名的简单方法

    1.查看当前的主机名 [root@fangjian ~]# hostnamectl Static hostname: brace Pretty hostname: Brace Icon name: computer-vm Chassis: vm Machine ID: 20191225111607875619293640639763 Boot ID: 25ac5021d229471382a26bea3d351de3 Virtualization: kvm Operating System: Ce

  • 独辟蹊径:实现Linux下的局域网远程接入

    本文介绍一种利用Linux服务器的两个串口构建拨号服务器的方法,远程用户可以通过拨号连接到局域网,方便地进行信息传递和资源共享. 笔者的配置环境是Red Hat 8.0 Linux操作系统,所需的硬件包括两个外置Modem(分别连接到COM1和COM2端口)和两条电话线.实现步骤如下: 1.初始化串口设备 在/etc/inittab文件中加入如下两行,用来初始化ttyS0和ttyS1两个串口设备: S0:345:respawn:/sbin/mgetty -D -X 3 ttyS0 S1:345:

  • Python获取Windows或Linux主机名称通用函数分享

    通过python的os模块获取windows或者linux主机名的通用函数. 复制代码 代码如下: #!/usr/bin/env python  #coding=utf-8    import os    def hostname():          sys = os.name            if sys == 'nt':                  hostname = os.getenv('computername')                  return hos

  • VMware下配置Linux系统局域网和外网访问图文教程

    要使用Linux系统很重要的一个操作就是使Linux系统能够访问互联网,只有Linux系统能够访问互联网才能够去下载很多自己所需要的资源,如果不能访问互联网那么使用Linux系统往往会卡在这一步,假设你装的是一个minimal版本的CentOS,那么很多Linux系统下面的工具都是没有被安装的,这个时候如果不能访问互联网,你会感觉特别的蛋疼,因为很多工具都没法下载以及安装,那么,今天小编就给大家分享一下如何在VMware下配置Linux系统成功访问局域网和外网. 第一步:打开VMware虚拟机,

  • Linux修改网卡名称、主机名的方法

    Linux修改网卡名称.主机名 环境:VirtualBox 5.0.14 + RHEL 6.5 需求:个人实验搭建一套Standby RAC时,为了节约时间,直接复制之前安装RAC的主机模板. 但复制之后发现网卡名称不一致: 我这里的环境,Primary RAC的Public IP和Private IP分别对应的网卡名称是eth2,eth3.  而复制Standby RAC的其中一台网卡名称是eth6,eth7:另一台是eth4,eth5.为了保持一致方便后续管理维护,需要将Standby RA

  • 修改Linux主机名的方法

    执行命令 hostname,修改当前系统的主机名 # hostname newhost 修改 /etc/sysconfig/network,使得下次启动时使用新的主机名 hostname=newhost 修改 /etc/hosts.不修改的话,apache等需要解析主机名的服务将不能启动 127.0.0.1 newhost localhost 最后就是命令行提示符中的主机名还没有改变,如果很在意的话,重新登录一下就行了

  • 局域网内python socket实现windows与linux间的消息传送

    有个需求,就是在windows上看见一篇介绍linux相关的文章,想在局域网内的另外一台linux电脑上尝试一下, 于是就需要把该网页链接发送给linux,不想一点一点敲链接,又苦于没有找到其它好的方法. 想起之前学习计算机网络时了解到的socket,于是再次打开课本,代码(python3)如下: 客户端(windows)代码: # 局域网内的windows客户端 from socket import * #导入socket里的所有东西 serverName = '127.0.0.1' #换成局

  • linux下快速列出局域网中所有主机名(计算机名)的脚本

    最近有列出局域网中所有主机名的需求(SMB协议里的),但是findsmb命令总是列不全,搜了搜网上也没什么现成的解决方案,于是自己写了个python脚本 脚本会扫描局域网arp表中所有ip,并尝试解析其主机名,这样可以较为彻底地列出相关信息. 注意,运行这个脚本需要samba-common-bin和arp-scan这两个包,没有的请先apt install它们. 用法:直接运行或用python3运行,然后输入需要扫描的网卡名(network interface)(不知道的运行ifconfig可查

  • Linux下快速搭建php开发环境

    一.Linux下快速搭建php开发环境 1.安装XAMPP for Linux XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包,使用XAMPP可快速搭建PHP开发环境.下载链接:https://www.apachefriends.org/download.html  进入下载界面选择XAMPP for Linux下载 启动终端输入命令  cd /下载xampp保存的路径.我的保存路径是:/home/coderose/下载.更改安装程序的安装权限,输入命令:

  • Linux下快速比较两个目录的不同(多种方法)

    曾多次想要在Linux下比较目录a和目录b中文件列表的差别,然后对目录a比目录b中多出的文件.少掉的文件分别做处理.但是,在网上搜索了多次也都没找到能直接处理好的工具. 所以想了很多不少方法,自我感觉都不错,而且网上似乎没有这方面的文章,所以分享出来给大家.如果各位有更好的工具或者方法,盼请留下说明(本文第2部分:图形化的比较结果搜集自网上,我也没有在图形化界面下操作的需要,所以没有多做介绍) 以下是本文有些地方涉及到的目录结构. [root@node1 ~]# tree directory1

  • Linux 如何快速找到运行中的进程

    1 进程概述 通俗的讲程序是一个包含可以执行代码的静态的文件.进程是一个开始执行但是还没有结束的程序的实例. 当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作,使程序变成进程以供系统调用. 1.1 进程的分类 按照进程的功能和运行的程序分类,进程可划分为两大类: 系统进程 可以执行内存资源分配和进程切换等管理工作,而且该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行. 用户进程 通过执行用户程序.应用程序或内核之外的系统程序而

  • C#列出局域网中可用SQL Server服务器

    SQLDMO由Microsoft SQL Server自带的SQLDMO.dll提供,由于SQLDMO.dll是一个COM对象,所以大家在用之前必须在.NET项目中添加对它的引用.注意是添加COM引用,在列表中找到"Microsoft  SQLDMO Object Library(可能路径是:系统盘符:\Program Files\Microsoft SQL Server\80\Tools\Binn\sqldmo.dll)",然后点确定即可添加引用. 下面是用C#语言书写的用于列举局域

  • C#列出局域网中可用SQL Server服务器(续)

    using System; using System.Data.Sql; using System.Text; namespace AllSqlServer {     class Program     {         static void Main(string[] args)         {             //SQLDMO.NameList names;             //SQLDMO.ApplicationClass ac = new SQLDMO.Appl

  • linux下c语言中隐藏进程命令行参数(例如输入密码等高危操作)

    前言 启动程序很多时候用命令行参数可以很方便,做到简化一些配置,但是输入用户名密码等操作,如果通过进程查看工具直接看到密码就太不安全了. 因此很有必要研究如何隐藏命令行参数中的某些字段,当然做成配置文件也是极好的,但是无疑给运行程序增加额外操作.编辑保存配置文件也会费点事. 我结合网上找到的一些方案,以及自己总结一个方案,记下笔记. 复写argv参数 该方案只在Linux下的C语言中验证成功,因为window下都是win32api获取命令行参数,但是没有设置这个,估计window不支持这种骚操作

  • Linux下的网络监听技术之二

    相应的数据结构: struct arphdr { unsigned short int ar_hrd; unsigned short int ar_pro; unsigned char ar_hln; unsigned char ar_pln; unsigned short int ar_op; #if 0 unsigned char _ar_sha[ETH_ALEN]; unsigned char _ar_sip[4]; unsigned char _ar_tha[ETH_ALEN]; uns

  • linux 下部署nodejs项目(两种方式)

    之前在linux下部署过几次NodeJS,也有些经验,最近也在Q群里有朋友问Node在linux下部署问题,于是总结一下,主要介绍两种不同的部署方式,二进制文件直接解压部署和手动编译安装,一来巩固自己的知识,二来希望能对新手有所帮助. 关于在node在linux的部署我认为主要有三种方式, 第一种就是自己下载源码,手动编译二进制,即是部署过程. 第二种方法 直接下载二进制文件解压即可. 第三种方式,使用yum install node或者apt-get install node安装(在linux

  • linux中快速列出文件列表的多种方法总结

    前言 最近在工作中碰到一个很棘手的问题,需要读取出ubuntu系统中某个目录下所有文件,由于服务器中存储的文件实在太多,导致此过程效率十分低下,动辄需要等待一个小时之久,还只是一个目录.于是如何快速获取文件列表便是这两天的头等大事,折腾半天找到一个较为快速的方法,记录如下,话不多说了,来一起看看详细的介绍吧. 多种实现方法 尝试了多种方法,有编程的和非编程的. 1.walk python的walk库能够递归的读取目录下所有文件,这个是最常规的方法,然而效率有些缓慢.实现很简单,不赘述. 2.os

随机推荐