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

 
         
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM