xxx.split(‘/‘)[-1]解析

这篇博客探讨了Python中如何使用字符串操作解析URL路径。通过`split()`函数,可以方便地获取URL的各个部分,例如域名、路径和文件名。示例代码展示了如何获取最后一段(文件名)以及路径前的所有部分。这对于处理网络资源路径非常实用。

origin = 'http://download.tensorflow.org/models/imagenet/inception-2015-12-05.tgz' ###原链接

###split操作符

newname = origin.split('/')[-1] #以‘/ ’为分割f符,-1表示保留最后一段

###额外补充

newname_1 = origin.split('/')[-1] ###保留最后一段

newname_2 = origin.split('/')[:-1] ###取最后一段之前的所有

newname_3 = origin.split('/')[::-1] ###逆序输出

print(filename)

print(filename_1)

print(filename_2)

print(filename_3)

###输出

inception-2015-12-05.tgz

['http:', '', 'download.tensorflow.org', 'models', 'imagenet']

['inception-2015-12-05.tgz', 'imagenet', 'models', 'download.tensorflow.org', '', 'http:']

[23:12:30 WARN]: [Minetorio] Task #190 for Minetorio v0.92 generated an exception java.lang.NullPointerException: Cannot invoke "String.split(String)" because "<parameter1>" is null at MTP-0.92.jar/com.MT.xxxtrigger50xxx.MineUtil.wrapText(MineUtil.java:341) ~[MTP-0.92.jar:?] at MTP-0.92.jar/com.MT.xxxtrigger50xxx.MineUtil.wrapText(MineUtil.java:313) ~[MTP-0.92.jar:?] at MTP-0.92.jar/com.MT.xxxtrigger50xxx.Devices.Device.getDeviceStack(Device.java:1023) ~[MTP-0.92.jar:?] at MTP-0.92.jar/com.MT.xxxtrigger50xxx.Devices.Utility.PowerProvider.addDevice(PowerProvider.java:194) ~[MTP-0.92.jar:?] at MTP-0.92.jar/com.MT.xxxtrigger50xxx.MineMain.addDevices(MineMain.java:685) ~[MTP-0.92.jar:?] at MTP-0.92.jar/com.MT.xxxtrigger50xxx.MineMain$1.run(MineMain.java:212) ~[MTP-0.92.jar:?] at org.bukkit.craftbukkit.scheduler.CraftTask.run(CraftTask.java:78) ~[paper-1.21.7.jar:1.21.7-16-6e598f8] at org.bukkit.craftbukkit.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:474) ~[paper-1.21.7.jar:1.21.7-16-6e598f8] at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1662) ~[paper-1.21.7.jar:1.21.7-16-6e598f8] at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1530) ~[paper-1.21.7.jar:1.21.7-16-6e598f8] at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1252) ~[paper-1.21.7.jar:1.21.7-16-6e598f8] at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:310) ~[paper-1.21.7.jar:1.21.7-16-6e598f8] at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
07-14
<think> 我们被要求解释如何使用nbtscan工具,特别是在Kali Linux中运行它。nbtscan是一个用于扫描IP网络以获取NetBIOS名称信息的程序。它向给定范围内的每个地址发送NetBIOS状态查询,并列出接收到的信息。 根据用户给出的示例,我们可以总结出nbtscan的使用格式如下: 1. 扫描整个C类网络:`nbtscan -r 192.168.1.0/24` 2. 扫描一个IP范围:`nbtscan 192.168.1.25-137` 3. 以脚本友好格式输出(使用冒号分隔字段):`nbtscan -v -s : 192.168.1.0/24` 4. 从文件中读取IP地址列表进行扫描:`nbtscan -f iplist` 注意:在Kali Linux中,nbtscan通常已经安装。如果没有,可以使用`sudo apt install nbtscan`安装。 下面,我们将详细解释这些用法,并给出相应的代码示例(尽管nbtscan是一个命令行工具,我们给出的“代码”实际上是命令行的使用示例)。 ### 1. 扫描整个C类网络 ```bash nbtscan -r 192.168.1.0/24 ``` - `-r`:指定使用本地端口137进行扫描(这是NetBIOS名称服务的端口),这样可以避免发送太多的广播包,从而减少网络流量。 - `192.168.1.0/24`:表示扫描从192.168.1.0到192.168.1.255的所有IP地址。 ### 2. 扫描一个IP范围 ```bash nbtscan 192.168.1.25-137 ``` - 这个命令会扫描从192.168.1.25到192.168.1.137(包括两端)的所有IP地址。 ### 3. 以脚本友好格式输出 ```bash nbtscan -v -s : 192.168.1.0/24 ``` - `-v`:详细输出(实际上,在man手册中,`-v`是显示版本信息,而这里的示例可能是为了显示更详细的信息,但实际使用中,`-v`并不是必须的。根据示例,可能是为了配合`-s`使用?) - `-s :`:指定输出字段分隔符为冒号。这样便于其他脚本处理输出结果。 注意:在示例中,命令是`nbtscan -v -s : 192.168.1.0/24`,但根据man手册,`-s`后面需要跟一个分隔符,而`-v`是显示版本。实际上,示例可能想用`-h`来显示标题(但这里没有)。所以,如果我们想要脚本友好的输出,通常使用`-s`指定分隔符,而`-v`在这里可能是个错误?实际上,在man手册中,没有`-v`选项用于详细模式,但是有`-q`(安静模式)和`-h`(显示标题)。因此,我们通常这样用: ```bash nbtscan -s : 192.168.1.0/24 ``` 这样输出的格式为:IP:NetBIOS_Name:Service:Flags ### 4. 从文件读取IP列表 ```bash nbtscan -f iplist ``` 其中`iplist`是一个包含IP地址或范围的文件,每行一个条目。例如,文件内容可以是: ``` 192.168.1.1 192.168.1.50-100 192.168.2.0/24 ``` ### 注意事项 - nbtscan需要以root权限运行(因为需要发送和接收原始数据包),所以在Kali中,我们通常使用`sudo`来运行: ```bash sudo nbtscan -r 192.168.1.0/24 ``` ### 示例输出 当运行`nbtscan 192.168.1.25-137`时,可能的输出如下: ``` 192.168.1.25 MY_COMPUTER SHARING 192.168.1.26 PRINTER <00> UNIQUE ... ``` ### 在Python中调用nbtscan 虽然nbtscan是一个命令行工具,但我们可以通过Python的subprocess模块来调用它,并解析输出结果。 以下是一个简单的Python脚本,用于调用nbtscan并解析输出(假设我们使用上面的第三种格式,以冒号分隔): ```python import subprocess def run_nbtscan(target): # 构造命令,使用冒号分隔的输出格式 cmd = ['sudo', 'nbtscan', '-s', ':', target] result = subprocess.run(cmd, capture_output=True, text=True) if result.returncode != 0: print("Error running nbtscan:", result.stderr) return [] # 解析输出 devices = [] for line in result.stdout.splitlines(): # 每行格式: IP:NetBIOS_Name:Service:Flags parts = line.split(':') if len(parts) >= 4: ip = parts[0] name = parts[1] service = parts[2] flags = parts[3] devices.append({'ip': ip, 'name': name, 'service': service, 'flags': flags}) else: print(f"Skipping malformed line: {line}") return devices # 示例:扫描一个C类网络 if __name__ == '__main__': target_network = '192.168.1.0/24' devices = run_nbtscan(target_network) for dev in devices: print(f"IP: {dev['ip']}, Name: {dev['name']}, Service: {dev['service']}, Flags: {dev['flags']}") ``` 注意:运行此脚本需要sudo权限,因为nbtscan需要root权限。 ### 解释 - 我们使用`subprocess.run`来运行命令,并捕获输出。 - 通过`-s :`参数,我们让nbtscan的输出以冒号分隔,便于解析- 然后,我们将每一行分割成四部分:IP、NetBIOS名称、服务类型和标志。 - 返回一个包含设备信息的字典列表。 §§相关问题§§: 1. NetBIOS协议的作用是什么? 2. 除了nbtscan,还有哪些工具可以用于NetBIOS扫描? 3. 如何防范NetBIOS信息泄露? 4. 在Windows系统中,如何查看本地计算机的NetBIOS名称? </think> ### Kali Linux中使用NBtscan进行网络扫描详解 NBtscan是一款用于扫描IP网络的NetBIOS名称信息的工具,可以识别Windows主机、工作组和其他NetBIOS相关设备。以下是完整的使用指南和代码示例: #### 1. 基本扫描命令 ```bash # 安装nbtscan sudo apt update && sudo apt install nbtscan # 扫描整个C类网络 nbtscan -r 192.168.1.0/24 # 扫描IP范围 nbtscan 192.168.1.25-137 ``` #### 2. 高级扫描选项 ```bash # 脚本友好输出格式(冒号分隔) nbtscan -v -s : 192.168.1.0/24 # 从文件读取IP列表 echo "192.168.1.1" > targets.txt echo "192.168.1.50-100" >> targets.txt nbtscan -f targets.txt # 快速扫描模式(跳过未响应主机) nbtscan -q 192.168.1.0/24 ``` #### 3. Python自动化扫描脚本 ```python #!/usr/bin/env python3 """ 自动化NBtscan扫描工具 输出格式: IP | NetBIOS名称 | MAC地址 | 服务 """ import subprocess import re def run_nbtscan(target): """执行NBtscan扫描并解析结果""" try: # 执行扫描命令 cmd = f"nbtscan -v {target}" result = subprocess.check_output(cmd, shell=True, text=True) # 解析结果 devices = [] pattern = r'(\d+\.\d+\.\d+\.\d+)\s+([^\s]+)\s+(\S+)\s+([A-Z0-9<>\s]+)' for line in result.split('\n'): match = re.match(pattern, line) if match: ip, name, mac, services = match.groups() devices.append({ 'ip': ip, 'name': name.strip('<>'), 'mac': mac, 'services': services.strip(), 'status': 'Active' }) return devices except subprocess.CalledProcessError: return [] if __name__ == "__main__": target = "192.168.1.0/24" # 修改为你的目标网段 print(f"扫描 {target} 中...") devices = run_nbtscan(target) print("\n扫描结果:") print("IP地址\t\tNetBIOS名称\tMAC地址\t\t服务") print("-" * 60) for dev in devices: print(f"{dev['ip']}\t{dev['name'][:15]}\t{dev['mac']}\t{dev['services'][:20]}") print(f"\n发现 {len(devices)} 个活动设备") ``` #### 4. 代码解释 1. **依赖环境**: - 需在Kali Linux或已安装nbtscan的系统运行 - Python 3.6+ 环境 2. **核心功能**: - 使用`subprocess`模块执行系统命令 - 正则表达式解析扫描结果 - 提取IP、主机名、MAC地址和服务信息 - 结构化输出扫描结果 3. **输出字段说明**: - `IP地址`:设备网络地址 - `NetBIOS名称`:Windows主机名或工作组名 - `MAC地址`:设备的物理地址 - `服务`:侦听的NetBIOS服务(如文件共享、域控制器等) #### 5. 扫描结果分析示例 典型输出示例: ``` 192.168.1.1 ROUTER aa:bb:cc:dd:ee:ff SHARING, DC 192.168.1.25 WIN10-PC 00:11:22:33:44:55 WORKSTATION 192.168.1.100 FILESERVER 55:44:33:22:11:00 FILE SERVER ``` 服务代码含义: - `SHARING`:启用文件和打印机共享 - `WORKSTATION`:Windows工作站服务 - `DC`:域控制器 - `SQL`:SQL Server服务 - `IIS`:Web服务器服务 #### 6. 安全注意事项 1. **法律合规**: - 仅扫描自己拥有或获得书面授权的网络 - 企业环境中需获得IT部门许可 2. 防御措施: ```powershell # Windows禁用NetBIOS Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\services\NetBT\" -Name Enable -Value 0 # 防火墙规则阻止137-139端口 netsh advfirewall firewall add rule name="Block_NetBIOS" dir=in action=block protocol=TCP localport=135-139 ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值