• 445端口访问记录


    最近 有好多用户中了 “蠕虫”类病毒,所以应该对局域网 做下 监听,如对445 端口的扫描或访问记录。

    说下思路:

    1. 监听本机所有网卡的 445 端口(本机不向外发送snmp)。
    2. 记录下访问本机445端口的IP,访问次数,访问时间。
    3. 按访问次数进行降序排序,访问本机次数有记录的,可以手动去查杀下。

    因该脚本与Windows 共享冲突,可以在 服务里关闭 445 端口,再打开 该脚本。

    结果 如下图所示。

     

    输出的 记录如下。

     

    代码如下

    import os
    import socket  # 导入 socket 模块
    from threading import Thread
    import time
    import operator
    
    ADDRESS = ('', 445)  # IP地址,端口
    g_socket_server = None 
    g_conn_pool = []  # 连接池
    bad_list = []  # 记录访问的IP
    
    #  格式化时间
    def TimeStampToTime(timestamp):
        timeStruct = time.localtime(timestamp)
        return time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)
    
    #  访问本机IP 的类
    class Bad_gay(object):
        def __init__(self, addr, time=1,visitTime = str(TimeStampToTime(time.time()))):
            self.addr = addr
            self.time = time
            self.visitTime = visitTime
    
    #  输出文本信息
    def showInfo():
        print("""--------------------------
    输入1:导出到 Export_IP.csv.
    输入2:退出
    """)
    
    #  输出记录的IP
    def show():
        global bad_list
        bad_list.sort(key=operator.attrgetter('time'),reverse=True)
        x = os.system('cls')
        print("IP Address    --num    --time"  )
        for j in bad_list:
            if j.addr != "":
                print("{}    --{}    --{}".format(j.addr, j.time, j.visitTime))
    
    #  判断新访问的IP,是否被记录
    def has_name(new_bad):
        result = False
        for k in bad_list:
            if k.addr == new_bad:
                result = True
                break
        return result
    
    # 把记录的IP加入被访问的数组
    def add_list(new_bad):
        global bad_list
        if new_bad =="":
            return
        if has_name(new_bad):
            for i in bad_list:
                if i.addr == new_bad:
                    i.time = i.time + 1
                    i.visitTime = str(TimeStampToTime(time.time()))
                    break
        else:
            bad_list.append(Bad_gay(new_bad))
    
    # 初始化 socket
    def init():
        global g_socket_server
        g_socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        g_socket_server.bind(ADDRESS)
        g_socket_server.listen(5)
        print(".....已开始记录.....")
    
    # 从连接里 截图访问都IP
    def accept_client():
        global bad_list
        while True:
            client, addr = g_socket_server.accept()
            add_list(str(addr[0]))        
            client.close()
            show()
            showInfo()
    
    #  主方法
    if __name__ == '__main__':
        x = os.system('cls')
        init()
        # 新开一个线程,用于接收新连接
        thread = Thread(target=accept_client)
        thread.setDaemon(True)
        thread.start()
        print("IP Address    --num    --time"  )
        # 主线程逻辑
        while True:
            cmd = input("""--------------------------
    输入1:导出到 Export_IP.csv.
    输入2:退出
    """)
            if cmd == '1':
                x = os.system('cls')
                ipStr="IP,time,visitTime"+"
    "
                for badGay in bad_list:
                    # print(badGay.addr)
                    ipStr=ipStr+badGay.addr+","+ str(badGay.time)+","+badGay.visitTime+"
    "
                with open(r".Export_IP.csv","w") as f:
                    f.write(ipStr)
                show()
                # showInfo()
            elif cmd == '2':
                exit()

    ---

    关闭 445 端口.计算机需要重启.

    
    

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesNetBTParameters]

    "SMBDeviceEnabled"=dword:00000000

    
    
     
     
  • 相关阅读:
    Gym
    Gym 100712H
    CodeForces
    CodeForces
    P1103 书本整理(DP)
    P1435 回文子串(最长公共子序列)
    P1095 守望者的逃离(线性DP)
    P1077 摆花(背包)
    P1832 A+B Problem(再升级)
    P1757 通天之分组背包(分组背包)
  • 原文地址:https://www.cnblogs.com/likehc/p/11968575.html
Copyright © 2020-2023  润新知