【夏虫语冰】测试服务器端口是否打开(命令行、Python)
  I6bYKJOwynuQ 2023年12月08日 26 0

1、简介

接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。

2、Python

2.1 sock.connect_ex

使用socket模块的connect_ex来判断端口是否打开

import socket

def check_port(ip, port):  
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    sock.settimeout(5)  
  
    try:  
        result = sock.connect_ex((ip, port))  
        if result == 0:  
            return True
        else:  
            return False
    except Exception as e:  
        print(f"错误: {str(e)}")  
    finally:  
        sock.close()

if __name__ == '__main__':      
    host = 'localhost'
    port = 8000
    if check_port(host, port):
        print(f'The port {port} on {host} is open.')
    else:
        print(f'The port {port} on {host} is closed.')

执行结果如下: 在这里插入图片描述

2.2 sock.connect

import socket

def check_port(host, port):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(1)
        sock.connect((host, port))
        sock.close()
        return True
    except:
        return False
    finally:  
        sock.close()

if __name__ == '__main__':
    ret = check_port('127.0.0.1', 80)
    print("80: ", ret)
    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

在这里插入图片描述

2.3 telnet命令

telnet <IP地址> <端口>
import os  
  
def check_port(ip, port):  
    result = os.system(f"telnet {ip} {port}")   #windows
    # result = os.system(f"telnet {ip} {port} > /dev/null 2>&1")  #linux
    if result == 0:  
        print(f"端口 {port} 是开放的")  
    else:  
        print(f"端口 {port} 是关闭的")

if __name__ == '__main__':
    ret = check_port('127.0.0.1', 80)
    print("80: ", ret)

    # ret = check_port('127.0.0.1', 8000)
    # print("8000: ", ret)

在这里插入图片描述

2.4 nc命令

nc -zv <IP地址> <端口>
import os  
  
def check_port(ip, port):  
    result = os.system(f"nc -zv {ip} {port} > /dev/null 2>&1") 
    if result == 0:  
        print(f"端口 {port} 是开放的")  
    else:  
        print(f"端口 {port} 是关闭的")

if __name__ == '__main__':
    # ret = check_port('127.0.0.1', 80)
    # print("80: ", ret)

    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

2.5 ping命令

ping <IP地址> -n <端口>
import os  
  
def check_port(ip, port):  
    # result = os.system(f"ping {ip} -n {port} > /dev/null 2>&1")  
    result = os.system(f"ping {ip} -n {port} ")  
    if result == 0:  
        print(f"端口 {port} 是开放的")  
    else:  
        print(f"端口 {port} 是关闭的")

if __name__ == '__main__':
    # ret = check_port('127.0.0.1', 80)
    # print("80: ", ret)

    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

在这里插入图片描述

2.6 requests检查http端口

import requests  
  
def check_port(ip, port):  
    try:  
        response = requests.get(f"http://{ip}:{port}")  
        if response.status_code == 200:  
            print(f"端口 {port} 是开放的")  
        else:  
            print(f"端口 {port} 是关闭的")  
    except requests.exceptions.ConnectionError:  
        print(f"端口 {port} 是关闭的")
        
if __name__ == '__main__':
    # ret = check_port('127.0.0.1', 80)
    # print("80: ", ret)

    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

在这里插入图片描述

2.7 Scapy库

Scapy是一个由Python编写的强大工具,目前很多优秀的网络扫描攻击工具都使用了这个模块。也可以在自己的程序中使用这个模块来实现对网络数据包的发送、监听和解析。这个模块相对于Nmap来说,更为底层。可以更直观的了解网络中的各类扫描攻击行为。

Scapy是一个 Python程序,它允许用户发送、嗅探、分析和伪造网络包。这种能力允许构建能够探测、扫描或攻击网络的工具。

Scapy是一个强大的交互式包操作程序。它能够伪造或解码大量协议的数据包,在网络上发送它们,捕获它们,匹配请求和响应,等等。Scapy可以轻松地处理大多数经典任务,如扫描、跟踪、探测、单元测试、攻击或网络发现。它可以代替hping、arpsoof、arp-sk、arping、p0f甚至Nmap、tcpdump和tshark的某些部分。

  • 安装Scapy库
pip install scapy

在这里插入图片描述

  • 代码测试
from scapy.all import *  
  
def check_port(ip, port):  
    # 构造一个ICMP数据包,并发送到目标IP地址和端口  
    packet = IP(dst=ip) / ICMP() / Raw(load=str(port))  
    # 发送数据包并获取响应  
    response = sr1(packet, timeout=1)  
    # 检查响应是否为ICMP错误类型  
    if response is None or response.type != ICMP.DEST_UNREACH:  
        print(f"端口 {port} 是开放的")  
    else:  
        print(f"端口 {port} 是关闭的")

if __name__ == '__main__':
    # ret = check_port('127.0.0.1', 80)
    # print("80: ", ret)

    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

在这里插入图片描述 运行报错了,哈哈哈哈哈,等热心小伙伴告诉俺解决方法。

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭ 如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O??? 如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡) 感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月08日 0

暂无评论

推荐阅读
I6bYKJOwynuQ