使用python的scapy库,提供一个通过nbns获取主机名称的示例代码

时间: 2023-02-12 10:33:23 浏览: 137

以下是使用scapy库通过nbns协议获取主机名称的示例代码:

from scapy.all import *

def get_hostname_by_nbns(ip):
    hostname = ""
    query = IP(dst=ip)/UDP(dport=137)/NBNSQueryRequest(NAME_TRN_ID=0x1, QUESTION_NAME="*", QUESTION_TYPE=0x20)
    response = sr1(query, timeout=2, verbose=False)
    if response and response.haslayer(NBNSQueryResponse):
        hostname = response[NBNSQueryResponse].RR_NAME
    return hostname

hostname = get_hostname_by_nbns("192.168.1.100")
print(hostname)
相关问题

使用python的scapy库,提供一个最新的通过nbns获取主机名称的示例代码

回答1:

下面是使用 scapy 库获取主机名称的代码示例:

from scapy.all import *

def get_hostname(ip):
    name = None
    try:
        ans, unans = sr(IP(dst=ip)/UDP(dport=137)/NBNSQueryRequest(NAME_QUERY_REQUEST='*'))
        for _, r in ans:
            name = r[NBNSQueryResponse].NAME_WIRE
    except Exception as e:
        print(e)
    return name

hostname = get_hostname("192.168.1.1")
print(hostname)

请注意,代码仅作为参考,可能需要根据实际情况进行调整。

回答2:

使用Python的scapy库获取主机名称的示例代码如下:

from scapy.all import *

def get_nbns_name(ip):
    pkt = Ether(dst="ff:ff:ff:ff:ff:ff") / IP(dst=ip) / UDP(dport=137, sport=RandShort()) / NBNSQueryRequest(QUESTION_NAME("*"))
    response = srp1(pkt, verbose=0, timeout=1)
    
    if response and NBNSQueryRequest in response:
        return response[NBNSQueryRequest].NB_NAME.rstrip()
    else:
        return None

if __name__ == "__main__":
    ip_address = "192.168.1.1"  # 替换为目标主机的IP地址
    hostname = get_nbns_name(ip_address)
    if hostname:
        print(f"主机IP地址 {ip_address} 的名称为:{hostname}")
    else:
        print("获取主机名称失败")

请注意,此示例代码假设目标主机已正确配置并运行NetBIOS服务,并将其IP地址替换为您要查询的主机IP地址。代码发送一个使用NetBIOS协议的NBNS查询请求,并等待主机的响应。如果能成功收到响应,并且响应中包含NBNS查询请求,代码将返回主机的名称。否则,将返回None表示获取主机名称失败。

回答3:

使用Python的Scapy库可以通过NBNS(NetBIOS Name Service)获取主机名称的示例代码如下:

from scapy.all import *

# 创建NBNS请求包
nbns_req = Ether(dst="ff:ff:ff:ff:ff:ff") / IP(dst="255.255.255.255") / UDP(sport=137, dport=137) / \
           NBNSQueryRequest(NAME_TRN_ID="0", FLAGS="0x0100", QDCOUNT=1, QUESTION_NAME=b'*', QUESTION_TYPE='NB')

# 发送NBNS请求包并接收响应
nbns_res = srp(nbns_req, timeout=2, verbose=False)[0]

# 解析NBNS响应包
for pkt in nbns_res:
    if pkt[1].haslayer(NBNSQueryResponse):
        nbns_resp_pkt = pkt[1]
        hostname = nbns_resp_pkt[DNSRR].NAME.decode('utf-8')
        print(f"主机名称:{hostname}")

说明:

  1. 首先,通过Ether(dst="ff:ff:ff:ff:ff:ff")创建一个广播的以太网帧。
  2. 然后,使用IP(dst="255.255.255.255")设置目标IP地址为子网广播地址。
  3. 接下来,使用UDP(sport=137, dport=137)创建UDP数据包并设置源端口和目的端口为NBNS的端口(137)。
  4. 通过NBNSQueryRequest()创建一个NBNS查询请求,并设置相应的字段。
  5. 最后,使用srp()发送NBNS请求包并接收响应,并通过NBNSQueryResponse解析响应包获取主机名称。

注意:请确保在使用之前已安装好Scapy库,并明确了网络环境的许可和合规性。

使用python的scapy库,提供一个可用的通过nbns获取主机名称的示例代码

回答1:

以下是使用python的scapy库通过NBNS获取主机名称的示例代码:

from scapy.layers.inet import IP, UDP
from scapy.layers.dns import DNSQR, DNS, DNSRR
from scapy.sendrecv import sr1

def get_hostname(ip):
    # 构造NBNS请求包
    packet = IP(dst=ip)/UDP(dport=137)/DNS(rd=1, qd=DNSQR(qname="WPAD"))
    # 发送请求并获取响应
    response = sr1(packet, verbose=False)
    # 解析响应包并返回主机名
    hostname = response[DNS].an.rrname
    return hostname

hostname = get_hostname("192.168.0.1")
print(hostname)

回答2:

使用Python的scapy库获取主机名称的示例代码如下:

from scapy.all import *

def get_host_name(ip):
    # 创建一个NBNS查询数据包
    pkt = Ether(dst="ff:ff:ff:ff:ff:ff")/IP(dst=ip)/UDP(dport=137, sport=RandShort())/NBNSQueryRequest(NAME_TRN_ID=RandShort(), QUESTION_NAME='\x20\x43\x4B\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41' + '\x00' + '\x20' + '\x00\x01')
    
    # 发送数据包并等待回复
    ans, unans = srp(pkt, timeout=2, verbose=0)
    
    # 遍历回复的数据包,提取主机名信息
    for pkt in ans:
        if pkt[1].haslayer(NBNSQueryResponse) and pkt[1][NBNSQueryResponse].QUERY_NAME == '\x20\x43\x4B\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41':
            print("主机IP: " + pkt[1][IP].src)
            print("主机名: " + pkt[1][NBNSQueryResponse].NAME)
            break

# 测试代码
ip_address = '192.168.0.1'  # 需要查询的主机IP地址
get_host_name(ip_address)

上述示例代码中,我们使用了scapy库的功能来构建一个NBNS查询数据包,并将其发送到指定的IP地址。然后,我们使用srp()函数发送数据包并等待回复。如果收到回复数据包,并且包含了主机名信息,我们将从中提取主机IP地址和主机名并进行打印。

回答3:

使用Python的Scapy库,你可以通过以下示例代码通过NBNS获取主机名称:

from scapy.all import *
import time

# 发送NBNS查询请求
def send_nbns_query(ip):
    # 构造NBNS查询请求数据包
    packet = Ether(dst="ff:ff:ff:ff:ff:ff") / IP(dst=ip) / UDP(dport=137, sport=RandShort()) / \
             NBNSQueryRequest(SUFFIX="file server service", QUESTION_TYPE="NBSTAT")

    # 发送数据包
    ans, unans = srp(packet, timeout=1, verbose=False)
    return ans

# 解析NBNS响应包,获取主机名称
def parse_nbns_response(response):
    for packet in response:
        if packet[1] and packet[1].haslayer(NBNSQueryResponse):
            nbns_payload = packet[1].getlayer(NBNSQueryResponse)
            if nbns_payload:
                hostname = nbns_payload.NAME[:-1].decode("utf-8")
                print("主机IP地址:", packet[1][IP].src)
                print("主机名称:", hostname)
                return hostname
    return None

# 主函数
def main():
    ip = input("请输入要查询的主机IP地址: ")
    response = send_nbns_query(ip)
    hostname = parse_nbns_response(response)
    if hostname is None:
        print("未找到对应的主机名称")

if __name__ == "__main__":
    main()

这个示例代码中,我们定义了两个函数:send_nbns_query()用于发送NBNS查询请求,parse_nbns_response()用于解析NBNS响应包并获取主机名称。

main()函数中,用户需要输入要查询的主机IP地址。然后,调用send_nbns_query()发送NBNS查询请求,并将响应传递给parse_nbns_response()进行解析。最后,将获取到的主机名称打印出来。

需要注意的是,Scapy库需要以root权限运行。你可以使用sudo命令运行Python脚本,或者在Python脚本中加入相关权限设置的代码。

向AI提问 loading 发送消息图标

相关推荐

zip
在地震学领域,对地震波的研究至关重要,因为它能帮助我们理解地震的动力学行为以及地壳结构。本压缩包“seismic wwf_as.rar_gateism_matlab_referqwe_地震_地震波分析”提供了用于地震波分析的相关工具和资料,特别强调了将地震波转换为反应谱的过程。这一过程在地震工程学、地震预测和灾害风险评估中有着广泛的应用。 让我们详细探讨一下“地震波分析”。地震波分为体波(P波和S波)和面波(L波)。P波是纵波,速度最快,最先到达,主要传递压力变化;S波是横波,速度稍慢,引起剪切运动;L波则是沿着地表传播的波动,振幅最大,破坏性最强。通过对地震波的记录和分析,可以获取地震源的特性、地壳的密度和弹性模量等信息。 描述中提到的“将地震波转换为反应谱”,这是一个关键步骤。反应谱是衡量地面加速度、速度或位移随频率变化的函数,它反映了不同频率的地震波在特定场地条件下产生的地面运动强度。在设计抗震建筑时,工程师会参考反应谱来确定结构的设计参数,确保其在地震中具有足够的稳定性。 这个压缩包中的核心文件“wwf_as.m”很可能是一个MATLAB脚本,用于实现上述转换。MATLAB是一款强大的数值计算和数据可视化软件,常用于科学计算和工程应用。在地震分析中,MATLAB可以处理地震数据,执行滤波、时频分析、谱分析等操作,进而生成反应谱。"gateism"可能是指某种特定的MATLAB算法或者数据处理方法,而"referqwe"可能是作者自定义的变量名或代码段的缩写,具体含义需要查看源代码才能明确。 在进行地震波分析时,通常会涉及以下步骤: 1. 数据预处理:包括去除噪声、校正时延、滤波等。 2. 计算地震波参数:如峰值加速度、峰值速度、峰值位移等。 3. 谱分析:计算功率谱密度,进一步得到反应谱。 4. 结合场地条件和建筑物特性,评估地震影响。 这个压缩包提供一个基于MATLAB的地震波分析工具,可以用来将地震波信号转化为反应谱,对地震的影响进行量化和评估,这对于地震科学研究和抗震工程设计具有很高的实用价值。通过深入学习和理解这些内容,我们可以更有效地预测和减轻地震灾害。。内容来源于网络分享,如有侵权请联系我删除。

最新推荐

recommend-type

python 的 scapy库,实现网卡收发包的例子

Scapy 是一个强大的网络协议构造和操作库,用于在Python中进行网络数据包的构建、解析、发送和接收。在本文中,我们将深入探讨如何使用 Scapy 库实现在网卡上进行数据包的收发。 首先,我们需要了解 Scapy 的基本...
recommend-type

Python获取本机所有网卡ip,掩码和广播地址实例代码

以下是一个实现该功能的函数`find_all_ip`和`find_all_mask`的示例代码: ```python import subprocess import re import platform def find_all_ip(platform): # 正则表达式匹配IP地址 ipstr = '([0-9]{1,3}\.)...
recommend-type

Python项目 基于Scapy实现SYN泛洪攻击的方法

Scapy是一个功能强大的网络数据包操作库,允许用户创建、解析和发送各种网络协议的数据包。由于其高度的灵活性和交互性,Scapy常用于网络分析、安全测试以及故障排查。在Python环境中,Scapy提供了简单易用的API,...
recommend-type

seismic wwf_as.rar_gateism_matlab_referqwe_地震_地震波分析

在地震学领域,对地震波的研究至关重要,因为它能帮助我们理解地震的动力学行为以及地壳结构。本压缩包“seismic wwf_as.rar_gateism_matlab_referqwe_地震_地震波分析”提供了用于地震波分析的相关工具和资料,特别强调了将地震波转换为反应谱的过程。这一过程在地震工程学、地震预测和灾害风险评估中有着广泛的应用。 让我们详细探讨一下“地震波分析”。地震波分为体波(P波和S波)和面波(L波)。P波是纵波,速度最快,最先到达,主要传递压力变化;S波是横波,速度稍慢,引起剪切运动;L波则是沿着地表传播的波动,振幅最大,破坏性最强。通过对地震波的记录和分析,可以获取地震源的特性、地壳的密度和弹性模量等信息。 描述中提到的“将地震波转换为反应谱”,这是一个关键步骤。反应谱是衡量地面加速度、速度或位移随频率变化的函数,它反映了不同频率的地震波在特定场地条件下产生的地面运动强度。在设计抗震建筑时,工程师会参考反应谱来确定结构的设计参数,确保其在地震中具有足够的稳定性。 这个压缩包中的核心文件“wwf_as.m”很可能是一个MATLAB脚本,用于实现上述转换。MATLAB是一款强大的数值计算和数据可视化软件,常用于科学计算和工程应用。在地震分析中,MATLAB可以处理地震数据,执行滤波、时频分析、谱分析等操作,进而生成反应谱。"gateism"可能是指某种特定的MATLAB算法或者数据处理方法,而"referqwe"可能是作者自定义的变量名或代码段的缩写,具体含义需要查看源代码才能明确。 在进行地震波分析时,通常会涉及以下步骤: 1. 数据预处理:包括去除噪声、校正时延、滤波等。 2. 计算地震波参数:如峰值加速度、峰值速度、峰值位移等。 3. 谱分析:计算功率谱密度,进一步得到反应谱。 4. 结合场地条件和建筑物特性,评估地震影响。 这个压缩包提供了一个基于MATLAB的地震波分析工具,可以用来将地震波信号转化为反应谱,对地震的影响进行量化和评估,这对于地震科学研究和抗震工程设计具有很高的实用价值。通过深入学习和理解这些内容,我们可以更有效地预测和减轻地震灾害。。内容来源于网络分享,如有侵权请联系我删除。
recommend-type

VC++代码实现小波变换在图像处理中的应用

在信息技术领域中,小波变换是一种重要的数学工具,它在图像处理、信号处理、计算机视觉等多个方面有着广泛的应用。本篇内容将详细解析使用VC++(Visual C++,一种微软提供的集成开发环境)实现小波变换的知识点,特别是针对图像处理方面的小波变换基础功能。 ### VC++实现小波变换的知识点 #### 1. 小波变换基础 小波变换是一种时频分析方法,它提供了一种时间和频率的局域化分析工具。相对于傅里叶变换,小波变换在处理非平稳信号时具有优势,能够提供信号的多尺度特性分析。小波变换主要分为连续小波变换(CWT)和离散小波变换(DWT),而图像处理中常用的是离散小波变换。 #### 2. VC++编程环境和工具 VC++作为一种编程开发环境,支持C++语言的开发,提供了强大的类库支持和丰富的开发工具。在使用VC++进行小波变换开发时,开发者可以利用MFC(Microsoft Foundation Classes)、ATL(Active Template Library)等类库来辅助实现复杂的程序功能。 #### 3. 小波变换在图像处理中的应用 小波变换在图像处理中的应用主要体现在以下几个方面: - **滤波**:小波变换可以通过多尺度分解将图像分解成不同频率的子带,有利于实现图像的去噪处理。 - **小波分解与重构**:通过将图像分解成一系列的近似系数和细节系数,可以在不同的尺度上对图像进行分析和处理。在处理完毕后,通过小波重构可以恢复图像。 - **图像融合**:利用小波变换可以实现多幅图像在同一尺度上的融合,这种融合通常在图像处理的多传感器数据融合以及图像增强等领域中有重要作用。 #### 4. VC++实现小波变换的步骤 实现小波变换的程序设计大致可分为以下几个步骤: - **选择合适的小波基**:不同的小波基具有不同的时频特性,需要根据具体问题来选择。 - **图像预处理**:包括图像的读取、显示以及必要的格式转换等。 - **小波分解**:设计小波分解算法,将图像分解成不同层次的小波系数。 - **小波系数处理**:根据需要对小波系数进行阈值处理、增强等操作。 - **小波重构**:根据处理后的小波系数重构图像。 #### 5. 关键技术点 - **多分辨率分析(MRA)**:这是小波变换中一个核心概念,它允许对信号进行不同尺度的分析。 - **小波基函数**:小波变换的核心是小波基函数的选择,常见的小波基有Haar、Daubechies、Coiflet等。 - **快速小波变换(FFT)**:为了提高变换的速度和效率,通常采用快速算法来实现小波变换,如快速傅里叶变换(FFT)算法的变种。 - **滤波器设计**:小波变换涉及到低通滤波器和高通滤波器的设计,这些滤波器的性能直接影响到小波变换的效果。 #### 6. 相关代码分析 在使用VC++进行小波变换的编程中,开发者通常需要创建多个类来处理不同的任务。例如: - **WaveletTransform**:此类负责小波变换的核心算法实现,包括正向变换和逆变换。 - **WaveletFilter**:此类负责小波滤波器的设计和应用。 - **ImageProcess**:此类负责图像的读取、处理和显示等操作。 在实际的代码实现中,开发者需要对每一部分进行精心设计,以保证程序的性能和稳定性。 #### 7. 小波变换的未来发展 随着技术的不断进步,小波变换在深度学习、机器视觉等新兴领域的应用前景广阔。未来小波变换的发展方向可能包括: - **多小波变换**:即使用多个小波基来对信号或图像进行分析。 - **非线性小波变换**:相比传统的线性小波变换,非线性小波变换能更好地处理图像中的非线性特征。 - **实时小波变换**:随着硬件技术的发展,实时小波变换在视频信号处理等实时性要求较高的领域将有更大需求。 #### 8. 结论 VC++实现小波变换是图像处理和信号处理中的重要技术,它具备高效、灵活的特点。通过上述的深入分析,我们可以了解到,无论是从理论还是实践应用的角度,小波变换都是一项基础且核心的技术,对于IT行业的从业者而言,掌握小波变换的知识和VC++实现技巧是提升专业能力的重要途径之一。
recommend-type

新手必看!Cmake3.30入门教程:快速掌握构建系统基本使用

# 摘要 CMake作为一种跨平台的自动化构建系统工具,已经成为开发者配置项目构建过程的标准方式。本文首先介绍了CMake的基础知识,包括它的项目结构、基础语法、变量使用以及命令和函数的详细说明。随后,深入探讨了CMake在实践操作中的应用,涵盖了单项目的构建、多项目的构建与依赖管理以及跨平台构建配置的技巧。最后,本文详述了CMake
recommend-type

前端和后端是什么

<think>嗯,用户问的是前端和后端是什么,得先理清楚这两个概念的基本定义。首先,前端和后端通常是指Web开发中的两个主要部分,但可能也涉及其他领域,比如移动应用或桌面软件。不过大多数情况下,用户可能是在问Web开发相关的内容,所以先从Web的角度来介绍比较合适。 接下来需要确定用户的知识水平。如果用户是刚入门的小白,可能需要用更通俗易懂的例子来解释,避免使用太多技术术语。比如,把前端比作餐厅的菜单和装修,后端比作厨房和厨师,这样用户可能更容易理解两者的分工和协作。 然后要考虑前端和后端的具体职责。前端主要负责用户界面和交互,比如HTML、CSS和JavaScript,这些都是用户直接看
recommend-type

Xerces-C 3.1.3版本发布:C++ XML解析库

标题和描述中未提供具体的信息,但是根据标签“xerces c 3.1.3”和提供的压缩包子文件名称列表“xerces-c-3.1.3”,我们可以推断出这指的是一个特定版本的Xerces-C库。 ### 知识点: #### Xerces-C介绍 Xerces-C是一个开源的C++语言实现的XML解析库,它是Apache Xerces系列的一部分,用于解析和验证XML文档。Xerces-C提供了全面的DOM、SAX和Pull解析器。它支持Unicode以及各种编码格式,并确保了对XML规范的完整支持。 #### 版本3.1.3 版本3.1.3是指Xerces-C库的一个特定版本。软件版本号通常由三部分组成:主版本号、次版本号和修订号。版本号的每一次改变通常代表着不同层面的更新,例如: - 主版本号变化可能意味着重大的功能变更或重写; - 次版本号的变化可能表示有新的功能加入或重要的改进; - 修订号的变化通常是为了解决bug或进行微小的改进。 #### 应用场景 Xerces-C库广泛应用于需要处理XML数据的应用程序中。例如,Web服务、文档转换工具、数据交换、数据存储等场景都可能用到XML解析技术。由于其跨平台的特性,Xerces-C可以被用于各种操作系统环境中。 #### 核心特性 - **DOM解析器:** 提供一种以节点树的形式来表示文档结构的解析方式,适用于需要随机访问文档的场景。 - **SAX解析器:** 采用事件驱动的模型,逐个处理文档中的事件,适用于流式处理文档的场景。 - **Pull解析器:** 类似于SAX,但解析过程可由客户端代码驱动,提供了更细粒度的事件控制。 - **验证支持:** 能够根据XML Schema、DTD等验证文档的有效性。 - **支持Unicode和各种编码:** 确保了库可以处理各种语言和特殊字符集的XML文档。 #### 安装与配置 通常,用户可以通过源代码编译安装Xerces-C,或者从包管理器安装预编译的二进制包。安装Xerces-C后,需要配置编译器和链接器以包含头文件路径和链接库。 #### API Xerces-C的API设计遵循C++的习惯用法,提供了丰富的类和接口供开发者使用。开发者需要熟悉其API来有效地利用库的功能。 #### 兼容性 版本3.1.3的Xerces-C兼容C++ 98标准,不过版本更新后可能支持更新的C++标准,比如C++11。开发者需要根据自己的项目需求选择合适的版本。 #### 社区与支持 Xerces-C是Apache软件基金会的项目,因此它拥有活跃的开发者社区和丰富的文档资源。用户在遇到问题时,可以在邮件列表、论坛和文档中寻求帮助。 #### 许可证 Xerces-C基于Apache许可证发布,该许可证允许用户免费地使用、修改和分发代码,适用于商业和非商业用途。 #### 更新与维护 软件项目通常会持续更新,修复bug、增加新功能和提高性能。开发者应关注官方发布的新版本,了解新版本的特性并决定是否升级自己的应用程序。 #### 应用案例 在现实世界的软件中,Xerces-C经常被用于处理XML数据的场景,例如在进行Web服务通信时解析SOAP消息,或者在企业应用中处理业务文档的交换等。 #### 其他版本 Xerces-C库随着时间的推移不断更新,每个新版本都可能引入新的特性和改进。因此开发者需要了解不同版本之间的差异,以便选择最适合自己项目的版本。 #### 注意事项 在使用Xerces-C时,开发者需要注意内存管理问题,比如在DOM解析器中可能会涉及到节点的创建和销毁。适当的内存管理可以防止内存泄漏和程序崩溃的问题。 通过以上的知识点,可以详细了解Xerces-C 3.1.3版本的功能、使用场景、安装配置和潜在的维护问题。开发者在使用该库进行开发时,应充分考虑这些知识点,以确保开发出高效、稳定的应用程序。
recommend-type

【板框式压滤机PLC选型秘籍】:10个关键步骤助你轻松选型

# 摘要 本文主要探讨板框式压滤机的PLC选型问题,首先概述了PLC选型的重要性及其在压滤机工作原理中的作用。接着详细分析了PLC选型的关键要素,包括输入/输出(I/O)需求的确定、性能指标的考量,以及环境因素的影响。文中通过实际案例,剖析了典型压滤机PLC选型的过程,并提出了硬件配置优化、软件编程和系统集成的建议。最后,文章指出并分析了PLC
recommend-type

非 HTTPS 环境下会拒绝摄像头访问

### 非HTTPS环境下浏览器拒绝摄像头访问的原因 现代浏览器实施了一项称为“混合内容阻止”的安全策略。该策略规定,在非加密连接(即HTTP而非HTTPS)下,某些敏感功能(如摄像头、麦克风、地理位置等)无法被调用[^3]。这是为了保护用户的隐私和数据安全,因为未加密的通信可能容易受到中间人攻击或其他形式的数据窃取。 具体来说,当网站尝试通过非HTTPS协议请求访问用户设备上的摄像头时,浏览器会检测到当前页面并非运行在一个安全环境中,并因此自动阻断此类请求[^4]。这种行为是由Web标准定义并由主流浏览器厂商共同遵循的最佳实践所决定的。 ### 解决方案 要使浏览器允许访问摄像头等功
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部