diff --git a/py/IP更新.py b/py/IP更新.py index 3686cda..af9ebac 100644 --- a/py/IP更新.py +++ b/py/IP更新.py @@ -328,3 +328,87 @@ if valid_ips_ports: update_and_write_ips(local_file_path, valid_ips_ports) else: print("没有找到可访问的视频流服务或者没有提取到IP地址和端口号。") + + + + + +# 更新江苏电信组播定义fofa链接列表 #/////////////////////////////////////// +fofa_urls = [ + 'https://fofa.info/result?qbase64=InVkcHh5IiAmJiByZWdpb249IkppYW5nc3UiICYmIGNpdHk9InN1emhvdSI%3D', # 苏州 #/////////////////////////////////////// + 'https://fofa.info/result?qbase64=InVkcHh5IiAmJiByZWdpb249IkppYW5nc3UiICYmIGNpdHk9Im5hbmppbmci', # nanjing + 'https://fofa.info/result?qbase64=InVkcHh5IiAmJiByZWdpb249IkppYW5nc3UiICYmIGNpdHk9Im5hbnRvbmci', # 南通 + 'https://fofa.info/result?qbase64=InVkcHh5IiAmJiByZWdpb249IkppYW5nc3UiICYmIGNpdHk9Inlhbmd6aG91Ig%3D%3D', # 扬州 + 'https://fofa.info/result?qbase64=InVkcHh5IiAmJiByZWdpb249IkppYW5nc3UiICYmIGNpdHk9ImNoYW5nemhvdSI=', # 常州 + 'https://fofa.info/result?qbase64=InVkcHh5IiAmJiByZWdpb249IkppYW5nc3UiICYmIGNpdHk9Ind1eGki', # 无锡 + 'InVkcHh5IiAmJiByZWdpb249IkppYW5nc3UiICYmIGNpdHk9Inh1emhvdSI=' # 徐州 +] + +# 尝试从fofa链接提取IP地址和端口号,并去除重复项 +def extract_unique_ip_ports(fofa_urls): + all_unique_ips_ports = set() + for fofa_url in fofa_urls: + try: + response = requests.get(fofa_url, timeout=10) + html_content = response.text + # 使用正则表达式匹配IP地址和端口号 + ips_ports = re.findall(r'(\d+\.\d+\.\d+\.\d+:\d+)', html_content) + all_unique_ips_ports.update(ips_ports) # 将IP和端口号添加到集合中 + except requests.RequestException as e: + print(f"请求 {fofa_url} 时发生错误: {e}") + return list(all_unique_ips_ports) +# 检查视频流的可达性 +def check_video_stream_connectivity(ip_port, urls_udp): + video_url = f"http://{ip_port}{urls_udp}" + cap = cv2.VideoCapture(video_url) + if cap.isOpened(): + cap.release() + return ip_port # 如果打开成功,返回IP和端口号 + else: + cap.release() + return None +# 从本地文件读取内容 +def read_file_content(file_path): + try: + with open(file_path, 'r', encoding='utf-8') as file: + return file.read() + except FileNotFoundError: + print(f"文件 {file_path} 未找到。") + return None +# 更新文件中的IP地址并将每个IP追加写入 +def update_and_write_ips(file_path, valid_ips_ports): + try: + original_content = read_file_content(file_path) + if original_content: + # 假设原文件中的IP地址格式为 http://IP:PORT + ip_port_pattern = r'http://(\d+\.\d+\.\d+:\d+)' + new_lines = [] + for line in original_content.splitlines(): + match = re.search(ip_port_pattern, line) + if match: + # 找到一个IP地址,替换为有效的IP地址列表 + for valid_ip_port in valid_ips_ports: + new_line = re.sub(ip_port_pattern, f'http://{valid_ip_port}', line) + new_lines.append(new_line) + # 将更新后的内容追加到文件末尾 + with open(file_path, 'a', encoding='utf-8') as file: + file.write("\n".join(new_lines) + "\n") + print(f"文件 {file_path} 已更新并追加保存。") + except Exception as e: + print(f"更新文件 {file_path} 时发生错误: {e}") +# 定义组播地址和端口 +urls_udp = "/rtp/239.49.8.19:9614" #/////////////////////////////////////// +# 提取唯一的IP地址和端口号 +unique_ips_ports = extract_unique_ip_ports(fofa_urls) +# 存储所有有效的IP地址和端口号 +valid_ips_ports = [ip_port for ip_port in unique_ips_ports if check_video_stream_connectivity(ip_port, urls_udp)] +if valid_ips_ports: + print("找到的可访问视频流服务的IP地址和端口号:") + for valid_ip_port in valid_ips_ports: + print(valid_ip_port) + # 指定需要更新的本地文件路径 + local_file_path = 'playlist/江苏电信.txt' #/////////////////////////////////////// + # 更新文件中的IP地址并将每个IP写入新行 + update_and_write_ips(local_file_path, valid_ips_ports) +else: + print("没有找到可访问的视频流服务或者没有提取到IP地址和端口号。")