目前现网我没有找到类似fping的ipv6地址段扫描存活工具,所以想到用python自己制作一款脚本,用于扫描ipv6地址段存活地址。
这个脚本需要以下的脚本和工具
1、Python 3.6+: 由于脚本使用了Python 3.6的语法和功能,因此需要安装Python 3.6或更新版本。测试内部环境是自带Python 2.7.5 版本的 需要升级到python3.6(内部环境 centos7.9)
yum install centos-release-scl -y //启用Software Collections (SCL)仓库,因为CentOS 7默认的YUM仓库中没有Python 3.6。
]yum install rh-python36 -y //下载python3.6
scl enable rh-python36 bash //当前会话启用python3.6
//每次启动shell时都自动启用Python 3.6
echo 'source scl_source enable rh-python36' >> ~/.bashrc
source ~/.bashrc
python --version //查看python当前版本
2、pip: pip是Python的包管理工具,用于安装和管理Python包。通常在安装Python时会默认安装pip,现在需要升级pip版本,才能运行脚本
pip install --upgrade pip //升级pip
//使用的是Software Collections (SCL)环境,可能需要使用以下命令来确保正确升级pip
scl enable rh-python36 bash
python -m pip install --upgrade pip
pip --version
pip 24.1 from /path/to/pip (python 3.6) //显示类似这样的内容说明升级成功
3、 scapy是一个强大的Python库,用于网络数据包的创建、修改和发送。在安装了Python和pip后,可以使用以下命令安装scapy:
pip install scapy
4、编写脚本文件 scanipv6.py
import sys
import ipaddress
from scapy.all import *
import readline
def ping_ipv6_address(address):
"""
Ping an IPv6 address and return True if it is alive, otherwise False.
"""
icmpv6_packet = IPv6(dst=address)/ICMPv6EchoRequest()
response = sr1(icmpv6_packet, timeout=2, verbose=0)
if response and ICMPv6EchoReply in response:
print(f"{address} is alive")
return True
return False
def scan_ipv6_network(network):
"""
Scan a network of IPv6 addresses and return a list of addresses that are alive.
"""
net = ipaddress.IPv6Network(network)
alive_addresses = []
for ip in net:
ping_ipv6_address(str(ip))
return alive_addresses
def main():
print("Enter the IPv6 network to scan (e.g., 2449:8C38:80:220::/125):")
while True:
try:
network = input("Network: ")
ipaddress.IPv6Network(network) # Validate input
break
except ValueError as ve:
print("Invalid input, please enter a valid IPv6 network (e.g., 2449:8C38:880:220::/125):")
scan_ipv6_network(network)
if __name__ == "__main__":
main()
5、在你报仇scanipv6.py文件的目录下运行脚本即可
python scanipv6.py
在Network输入你要扫描的ipv6网段即可。