Python编程--使用NMAP端口扫描

这篇博客介绍了如何在Python中使用Nmap模块进行端口扫描。通过创建PortScanner类对象并调用其scan()函数,可以针对指定的目标主机和端口进行扫描。示例代码展示了如何导入nmap和optparse模块,定义nmapScan函数,以及如何从命令行参数获取目标主机和端口。最后,主函数使用这些参数执行扫描并打印出端口状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python编程–使用NMAP端口扫描

安装好Python-Namp模块,(pip install python-nmap)。创建一个PortScanner()类对象,这使我们能用这个对象完成扫描操作。PortScanner类有一个scan()函数,它可将目标和端口的列表作为参数输入,并对它们进行基本的Nmap扫描。另外,还可以把目标主机的地址/端口放入数组中备查,并打印出端口的状态。示例代码如下:

# 导入模块
import nmap
import optparse

# 定义nmapScan函数,参数为目标主机和目标端口
def nmapScan(tgtHost, tgtPort):
  	# 实例化nmap端口扫描对象
    nmScan = nmap.PortScanner()
    # 执行scan()函数
    nmScan.scan(tgtHost, tgtPort)
		# 获取tcp协议对应的端口状态
    state = nmScan[tgtHost]['tcp'][int(tgtPort)]['state']
    print(f"[+] {tgtHost} tcp/{tgtPort} {state}")

# 定义主函数
def main():
   # 实例化语法对象
    parser = optparse.OptionParser('Usage %prog -H <target host> -p <target port>')
		# 添加—H, -p参数选项,定义变量名和类型,还有帮助说明
    parser.add_option('-H', dest = 'tgtHost', type = 'string', help = 'specify target host')
    parser.add_option('-p', dest = 'tgtPort', type = 'string', help = 'specify target port')
		# 生成语法参数元组
    (options, args) = parser.parse_args()
    tgtHost = options.tgtHost
    tgtPorts = str(options.tgtPort).split(', ')

    if tgtHost == None or tgtPorts[0] == None:
        print(parser.usage)
        exit(0)

    for tgtPort in tgtPorts:
        nmapScan(tgtHost, tgtPort)


if __name__ == '__main__':
    main()

执行这个脚本,运行结果如下图:

### Nmap 端口扫描使用教程 #### 安装Nmap 对于CentOS系统,可以通过`yum install nmap`来安装此工具[^2]。 #### 基础命令结构 Nmap的基础语法非常直观。最基础的形式就是提供一个目标IP地址或域名给Nmap进行扫描: ```bash nmap <target> ``` 这会触发一次默认的SYN扫描,它尝试连接到常见的1000个端口中并报告哪些处于开放状态[^4]。 #### 获取详细输出 为了获得更详尽的结果描述,在上述基础上添加参数`-v`可使程序运行得更加健谈,给出更多关于其操作的信息;而加上`-A`则能激活操作系统检测、版本检测、脚本扫描以及 traceroute 功能: ```bash nmap -v -A <target> ``` 这种组合不仅能够显示端口的状态(如open, closed 或 filtered),还能推测远程设备的操作系统类型及其上运行的服务版本信息[^1]。 #### 自定义端口范围 当需要检查特定的一组端口而非默认集时,可通过指定端口号列表或者区间实现这一点。例如要测试第22号至第80号之间的所有TCP端口可用性,则应输入如下指令: ```bash nmap -p 22-80 <target> ``` 同样地,也可以通过逗号分隔的方式列举多个不连续的目标端口,像这样:`-p 22,80,443`。 #### 扰乱端口扫描顺序 为了避免被防火墙轻易识别为恶意活动,默认按序排列的端口查询模式可以被打乱。为此只需加入`-r`标志位即可改变原有行为特性,使得每次发起请求前都会随机化待访问端口序列: ```bash nmap -r <target> ``` 这样做有助于绕过某些基于签名匹配机制的安全措施,从而提高成功获取所需数据的可能性[^3]。 #### TCP SYN扫描与其他高级选项 除了标准的SYN扫描外,还有其他几种专门针对不同场景设计的技术可供选用。比如想要执行完整的三次握手过程而不是仅仅发送SYN包的话,可以选择`-sT`来进行connect()扫描;而对于UDP流量感兴趣的场合下,则应该考虑采用`-sU`参数。 值得注意的是,这些特殊类型的扫描往往要求更高的权限级别才能正常运作——特别是在类Unix平台上通常意味着必须具备超级用户的权利才行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce_xiaowei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值