Python 网络编程:端口检测与IP解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。

Python 网络编程:端口检测与IP解析

在现代网络编程中,了解如何检查端口状态以及根据IP地址解析主机名是非常重要的技能。本文将介绍如何使用Python实现这两个功能,并提供相应的示例代码供读者参考。

一、检查端口是否打开

在网络应用中,判断一个特定端口是否开放可以帮助我们进行故障排查或安全审计。Python的socket库为我们提供了方便的工具来完成这一任务。以下是一个简单的示例,实现了对指定主机和端口的检查:

# 定义一个扫描给定主机IP地址和端口函数,参数为目标主机、目标端口
def connScan(tgtHost, tgtPort):
    try:
        # 创建一个socket对象
        connSkt = socket(AF_INET, SOCK_STREAM)
        # 设置socket超时时间
        connSkt.settimeout(1)  # 设置为1秒
        # 尝试连接到指定的主机和端口
        result = connSkt.connect_ex((tgtHost, tgtPort))
        # 如果返回值为0,说明端口开放
        if result == 0:
            print(f"端口 - {tgtPort} 在主机 {tgtHost} 上是开放的。")
        else:
            print(f"端口 - {tgtPort} 在主机 {tgtHost} 上是关闭的。")
    except Exception as e:
        print(f"发生异常:{e}")
    finally:
        connSkt.close()

代码解析

  • 使用socket()创建一个TCP/IP socket。
  • settimeout()方法用于设置连接的超时时间,以防止在连接过程中长时间阻塞。
  • connect_ex()方法尝试连接指定的主机和端口,并返回连接结果。
  • 最后,我们在finally块中确保无论成功与否都关闭socket连接,释放资源。

二、根据IP地址解析主机名

了解如何将IP地址转换为主机名是另一项重要的技能,特别是在调试网络问题时。我们同样可以通过socket库来实现这一功能。以下是相关示例代码:

# 定义一个主机解析函数,参数为目标主机,目标端口(可以是多个)
def portScan(tgtHost, tgtPorts):
    try:
        tgtIP = gethostbyname(tgtHost)
    except Exception as e:
        print('[-] Cannot resolve \'%s\':Unknown host' %tgtHost)
        return
    try:
        tgtName = gethostbyaddr(tgtIP)
        print('\n[+] Scan Results for: ' + tgtName[0])
    except Exception as e:
        print('\n[+] Scan Results for: ' +tgtIP)

    setdefaulttimeout(1)
    for tgtPort in tgtPorts:
        print('Scanning port ' + tgtPort)
        connScan(tgtHost, int(tgtPort))

代码解析

  • gethostbyaddr()方法根据IP地址返回对应的主机名及相关信息。
  • 我们同样在代码中使用了try...except结构,以捕获解析失败的情况并处理可能出现的异常。

三、整合上面两段代码

源码如下:

import optparse
import socket
from socket import *



def connScan(tgtHost, tgtPort):
    try:
        # 创建一个socket对象
        connSkt = socket(AF_INET, SOCK_STREAM)
        # 设置socket超时时间
        connSkt.settimeout(1)  # 设置为1秒
        # 尝试连接到指定的主机和端口
        result = connSkt.connect_ex((tgtHost, tgtPort))
        # 如果返回值为0,说明端口开放
        if result == 0:
            print(f"端口 - {tgtPort} 在主机 {tgtHost} 上是开放的。")
        else:
            print(f"端口 - {tgtPort} 在主机 {tgtHost} 上是关闭的。")
    except Exception as e:
        print(f"发生异常:{e}")
    finally:
        connSkt.close()


def portScan(tgtHost, tgtPorts):
    try:
        tgtIP = gethostbyname(tgtHost)
    except Exception as e:
        print('[-] Cannot resolve \'%s\':Unknown host' %tgtHost)
        return
    try:
        tgtName = gethostbyaddr(tgtIP)
        print('\n[+] Scan Results for: ' + tgtName[0])
    except Exception as e:
        print('\n[+] Scan Results for: ' +tgtIP)

    setdefaulttimeout(1)
    for tgtPort in tgtPorts:
        print('Scanning port ' + tgtPort)
        connScan(tgtHost, int(tgtPort))

def main():
    parser = optparse.OptionParser('usage %prog -H' + \
                                   '<target host> -p <target port>')
    parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')
    parser.add_option('-p', dest='tgtPort', type='string', help='specify target port[s] seperated by comma')
    (options, args) = parser.parse_args()
    tgtHost = options.tgtHost
    tgtPorts = str(options.tgtPort).split(',')

    if tgtHost == None or tgtPorts[0] == None:
        print('[-] You must specify a target host and port[s].')
        exit(0)
    portScan(tgtHost, tgtPorts)

if __name__ == '__main__':
    main()

运行结果如下:

(.venv) (base) liuxiaowei@localhost 运维 % python scanner.py -H 'www.baidu.com' -p '21,22,80'

[+] Scan Results for: 110.242.68.4
Scanning port 21
端口 - 21 在主机 www.baidu.com 上是关闭的。
Scanning port 22
端口 - 22 在主机 www.baidu.com 上是关闭的。
Scanning port 80
端口 - 80 在主机 www.baidu.com 上是开放的。
(.venv) (base) liuxiaowei@localhost 运维 % python scanner.py -H '192.168.1.23' -p '21,22,23,135,445'

[+] Scan Results for: localhost
Scanning port 21
端口 - 21 在主机 192.168.1.23 上是关闭的。
Scanning port 22
端口 - 22 在主机 192.168.1.23 上是开放的。
Scanning port 23
端口 - 23 在主机 192.168.1.23 上是关闭的。
Scanning port 135
端口 - 135 在主机 192.168.1.23 上是关闭的。
Scanning port 445
端口 - 445 在主机 192.168.1.23 上是关闭的。

总结

通过以上两个示例代码,我们可以看到使用Python进行网络编程是多么简单而高效。无论是检查端口状态还是根据IP地址进行反向解析,这些基本技能都是网络开发和运维过程中不可或缺的部分。希望本文能帮助您更好地理解和应用这些技术!

原创不易,欢迎点赞、关注、转发、收藏!!!

相关文章
|
18天前
|
安全 虚拟化
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力。通过具体案例,展示了方案的制定和实施过程,强调了目标明确、技术先进、计划周密、风险可控和预算合理的重要性。
40 5
|
20天前
|
SQL 安全 网络安全
网络安全的护城河:漏洞防御与加密技术的深度解析
【10月更文挑战第37天】在数字时代的浪潮中,网络安全成为守护个人隐私与企业资产的坚固堡垒。本文将深入探讨网络安全的两大核心要素——安全漏洞和加密技术,以及如何通过提升安全意识来强化这道防线。文章旨在揭示网络攻防战的复杂性,并引导读者构建更为稳固的安全体系。
31 1
|
28天前
|
SQL 安全 测试技术
网络安全的盾牌与剑——漏洞防御与加密技术解析
【10月更文挑战第28天】 在数字时代的浪潮中,网络空间安全成为我们不可忽视的战场。本文将深入探讨网络安全的核心问题,包括常见的网络安全漏洞、先进的加密技术以及提升个人和组织的安全意识。通过实际案例分析和代码示例,我们将揭示黑客如何利用漏洞进行攻击,展示如何使用加密技术保护数据,并强调培养网络安全意识的重要性。让我们一同揭开网络安全的神秘面纱,为打造更加坚固的数字防线做好准备。
41 3
|
15天前
|
安全 算法 网络安全
网络安全的盾牌与剑:漏洞防御与加密技术解析
【10月更文挑战第42天】在数字时代的海洋中,网络安全是守护数据宝藏的坚固盾牌和锋利之剑。本文将揭示网络安全的两大支柱——漏洞防御和加密技术,通过深入浅出的方式,带你了解如何发现并堵塞安全漏洞,以及如何使用加密技术保护信息不被窃取。我们将一起探索网络安全的奥秘,让你成为信息时代的智者和守护者。
27 6
|
15天前
|
存储 SQL 安全
网络安全的屏障与钥匙:漏洞防御与加密技术解析
【10月更文挑战第42天】在数字时代的浪潮中,网络安全成为守护个人隐私与企业数据不被侵犯的关键防线。本文将深入探讨网络安全中的两大核心议题——漏洞防御和加密技术。我们将从网络漏洞的识别开始,逐步揭示如何通过有效的安全策略和技术手段来防范潜在的网络攻击。随后,文章将转向加密技术的奥秘,解读其在数据传输和存储过程中保护信息安全的作用机制。最后,强调提升个人和企业的安全意识,是构建坚固网络安全屏障的重要一环。
|
18天前
RS-485网络中的标准端接与交流电端接应用解析
RS-485,作为一种广泛应用的差分信号传输标准,因其传输距离远、抗干扰能力强、支持多点通讯等优点,在工业自动化、智能建筑、交通运输等领域得到了广泛应用。在构建RS-485网络时,端接技术扮演着至关重要的角色,它直接影响到网络的信号完整性、稳定性和通信质量。
|
18天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
61 3
|
18天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
51 2
|
21天前
|
域名解析 网络协议 测试技术
IP、掩码、网关、DNS1、DNS2到底是什么东西,ping telnet测试
理解IP地址、子网掩码、默认网关和DNS服务器的概念是有效管理和配置网络的基础。通过使用ping和telnet命令,可以测试网络连通性和服务状态,快速诊断和解决网络问题。这些工具和概念是网络管理员和IT专业人员日常工作中不可或缺的部分。希望本文提供的详细解释和示例能够帮助您更好地理解和应用这些网络配置和测试工具。
54 2
|
1月前
|
边缘计算 自动驾驶 5G