跳到主要內容

發表文章

目前顯示的是有「Python」標籤的文章

Ubuntu 22.04 安裝PHP 7.4

目前最新的 Ubuntu LTS 是 22.04 版,其預設的套件庫 PHP 是 8.1 版本。 相較於 Ubuntu 20.04 用的是 PHP7.4,PHP8.1對於變數的宣告和陣列的 KEY 值有很嚴格的限制,未事前宣告的變數或陣列 KEY值就會報錯。如果是小一點的程式,在報錯的地方再針對變數和KEY 多做一個判斷可以解決;但是大一點的程式就很傷腦筋了。 網路上有提供新增套件庫,將原本的 PHP8.1 降級成 PHP7.4 的方法,以前設定時還蠻順利的,但是最近新設定一台虛擬主機時,欲一直遇到 python 的問題,最後利用手動增加套件庫的方式才解決這個問題。 參考資料: https://askubuntu.com/questions/1393381/unable-to-add-ondrej-repository-apt-in-ubuntu-20-04 1、在 /etc/apt/source.d 中新增 ondrej-ubuntu-php-jammy.list 2、在 ondrej-ubuntu-php-jammy.list 中新增: deb https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main # deb-src https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main 3、匯入所需的金鑰: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4f4ea0aae5267a6c  然後再作 apt update 及 apt install php7.4-fpm 及 php7.4 的相關套件即可。 設定系統主要啟用 PHP 版本 sudo update-alternatives --config php

利用 fail2ban 來達到自動封鎖的功能

繼前幾篇有關分析嚐試入侵紀錄的文章後,因為要一直分析和利用 whois 來抓 ip 區段,再寫到 iptables 防火牆規則去做封鎖的動作太累人了,所以利用 fail2ban 套件來達到自動封鎖的功能。 fail2ban 利用分析紀錄檔中固定的登入失敗的訊息,來抓取嚐試入侵的 ip,作法和前幾篇所講的手法是一樣的,只不過是程式來自動執行(好像是用 python 寫的,有空再來研究看看這些程式的寫法),加上設定檔指定各種封鎖相關的參數。 網路上相當多技術文章,就不特別把安裝和設定的過程寫出來了。 Ubuntu 16.04 安裝 fail2ban 如何在Ubuntu Server 18.04上安裝fail2ban How to Install and Configure Fail2ban on Ubuntu 20.04 [ Linux ] – 主機基本防護 防止爆力登入 fail2ban 簡易用法 Ubuntu 中使用 fail2ban 針對大量 access 做判斷及阻擋

改用 Python 顯示3D 學生座位成績表

以前有使用過用 gnuplot 來繪製校務系統的座位成績圖,改用 python 搭配 matplotlib 來繪製新的 3d 圖形 程式碼: import sys import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter with open("grade_data/sm2-1.txt", "r") as f:     mydata = f.readlines() x = [] y = [] z = [] for myline in mydata:     if myline[0] != '#':         tmp = myline.split()         x.append(int(tmp[5]))         y.append(int(tmp[6]))         z.append(float(tmp[4])) bottom = np.zeros_like(z) width = depth = 0.5 fig = plt.figure() cmap = cm.get_cmap('CMRmap') max_h = np.max(z) min_h = np.min(z) co = [cmap((k - min_h)/max_h) for k in z] ax = fig.add_subplot(projection='3d') ax.bar3d(x, y, bottom, width, depth, z, shade=True, color=co) ax.grid(True) plt.xlabel("X") plt.ylabel("Y") ax.set_title("n = %s , me...