当前位置: 首页 > article >正文

windows已建立威胁IP排查

在应急响应的时候,需要筛选出服务器建立连接的进程、PID,此代码可满足该需求实现共计2步

第一步获取服务器建立连接的ip

import re


# 从文件读取 netstat 输出
def read_netstat_file(file_path):
    try:
        with open(file_path, 'r') as file:
            return file.read()
    except Exception as e:
        print(f"Error reading file: {e}")
        return None


# 提取已建立连接和未建立连接的外部 IP 地址
def extract_ips_by_state(netstat_output):
    established_ips = set()  # 存储已建立连接的外部 IP 地址
    listening_ips = set()  # 存储未建立连接的外部 IP 地址

    # 正则表达式匹配 ESTABLISHED 状态的连接,提取外部 IP 地址(不包括端口)
    established_pattern = re.compile(r'^\s*TCP\s+\S+\s+(\S+)\s+ESTABLISHED', re.MULTILINE)
    # 正则表达式匹配 LISTENING 状态的连接,提取外部 IP 地址(不包括端口)
    listening_pattern = re.compile(r'^\s*TCP\s+\S+\s+(\S+)\s+LISTENING', re.MULTILINE)

    # 查找已建立连接的外部 IP 地址(不包含端口号)
    for match in established_pattern.findall(netstat_output):
        established_ips.add(match.split(':')[0])  # 去掉端口号部分

    # 查找未建立连接的外部 IP 地址(不包含端口号)
    for match in listening_pattern.findall(netstat_output):
        listening_ips.add(match.split(':')[0])  # 去掉端口号部分

    return established_ips, listening_ips


# 将 IP 地址写入文件
def write_ips_to_file(established_ips, listening_ips, output_file):
    try:
        with open(output_file, 'w') as file:
            file.write("已建立连接的外部 IP 地址:\n")
            for ip in established_ips:
                file.write(f"{ip}\n")

            file.write("\n未建立连接的外部 IP 地址:\n")
            for ip in listening_ips:
                file.write(f"{ip}\n")

        print(f"IP 地址已成功写入 {output_file}")
    except Exception as e:
        print(f"Error writing to file: {e}")


def main():
    input_file = 'all.txt'  # 你的 netstat 输出文件路径
    output_file = 'ips.txt'  # 要写入的输出文件路径
    netstat_output = read_netstat_file(input_file)

    if netstat_output:
        established_ips, listening_ips = extract_ips_by_state(netstat_output)
        write_ips_to_file(established_ips, listening_ips, output_file)


if __name__ == '__main__':
    main()

第二部查看服务器ip地址

import requests
import time


# 获取 IP 地理位置信息的函数
def get_ip_info(ip):
    url = f'https://qifu-api.baidubce.com/ip/geo/v1/district?ip={ip}'

    # 设置请求头(可以根据需要修改)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
        'Content-Type': 'application/json',
    }

    try:
        response = requests.get(url, headers=headers)  # 将请求头传入
        response.raise_for_status()  # 检查请求是否成功
        data = response.json()

        if data["code"] == "Success":
            info = data["data"]
            prov = info.get("prov", "未知")
            city = info.get("city", "未知")
            return ip, prov, city
        else:
            return ip, "未知", "未知"
    except requests.exceptions.RequestException as e:
        print(f"请求错误: {e}")
        return ip, "错误", "错误"
    except ValueError as e:
        print(f"解析错误: {e}")
        return ip, "错误", "错误"
# 批量查询 IP 地址信息
def batch_query_ips(file_path):
    with open(file_path, 'r') as file:
        ips = file.read().splitlines()

    for ip in ips:
        ip, prov, city = get_ip_info(ip)  # 解包为三个值
        print(f"IP: {ip}, Province: {prov}, City: {city}")
        time.sleep(1)  # 每次请求后延迟 5 秒


# 替换 'ips.txt' 为你的文件路径
batch_query_ips('ips.txt')


http://www.kler.cn/a/401700.html

相关文章:

  • 【Mac】未能完成该操作 Unable to locate a Java Runtime
  • Javaweb梳理17——HTMLCSS简介
  • css3新特性(二十六课)
  • 如何在C#中处理必盈接口返回的股票数据?
  • 数据分析24.11.13
  • 计算机网络之会话层
  • R语言基础入门详解
  • 【list的模拟实现】—— 我与C++的模拟实现(十四)
  • 经典的网络安全技术
  • 解决在使用JetBrains IDEs(如PyCharm或CLion)进行GitHub项目分享时,用户经常遇到“此站点的访问已被限制”的问题
  • 相机标定原理
  • SpringBoot升级全纪录之项目启动
  • Acme PHP - Let‘s Encrypt
  • 卷积神经网络之Yolo详解
  • Kotlin的data class
  • JSP是如何被执行的?
  • LabVIEW多通道面阵烟雾透过率测试系统
  • VSCode自定义插件创建教程
  • 软间隔支持向量机支持向量的情况以及点的各种情况
  • Java集合分页
  • uni-app快速入门(十二)--常用API(中)
  • 【Vim/Vi/Gvim操作】:列操作
  • SpringcloudAlibaba详解---超详细
  • 无人机侦察打击方案(2)
  • vue2中使用three.js步骤
  • 微服务网关聚合swagger(knife4j版本)