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"+"\n"
            for badGay in bad_list:
                # print(badGay.addr)
                ipStr=ipStr+badGay.addr+","+ str(badGay.time)+","+badGay.visitTime+"\n"
            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_MACHINE\SYSTEM\ControlSet001\Services\NetBT\Parameters]

"SMBDeviceEnabled"=dword:00000000


 
 

 

posted @ 2019-12-02 01:18  likehc  阅读(1479)  评论(0编辑  收藏  举报