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??? 如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡) 感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!