【DevOps】Linux 安全:iptables 組成、命令及應用場景詳解

導讀:全面掌握 iptables:從基礎到實踐

在 Linux 系統中,iptables?是一個非常強大的工具,它不僅是系統管理員用來構建和管理網絡防火墻的首選工具,而且也是一個功能豐富的網絡流量處理系統。無論是進行包過濾、監控網絡流量、還是實現復雜的網絡地址轉換 (NAT),iptables?都能提供靈活的解決方案。本文將帶你深入理解?iptables?的組成結構,掌握其常用命令,并通過具體的使用場景展示如何在實際中應用這些知識。

目錄

導讀:全面掌握 iptables:從基礎到實踐

一、iptables 的主要組成

表 (Tables)

鏈 (Chains)

規則 (Rules)

用戶定義的鏈

二、常用 iptables 命令

基本 iptables 命令格式

查看規則

添加規則

刪除規則

修改規則

插入規則

設置默認策略

保存和恢復規則

清空規則

端口重定向和 NAT

高級匹配和限速

日志記錄

狀態檢查

時間條件匹配

接口匹配

用戶自定義鏈

保存和加載規則

清空和重置

三、使用場景舉例

1. 基本的主機防護

允許特定的服務訪問

2. 防止 DDoS 攻擊

限制 SSH 連接嘗試

3. 端口轉發

將 80 端口轉發到 8080 端口

4. 網絡地址轉換 (NAT)

共享互聯網訪問

5. 日志和審計

記錄被拒絕的包

6. 使用時間條件控制訪問

在工作時間外允許 SSH 訪問

7. 防火墻繞過

臨時開放所有訪問

8. 防止 ICMP 泛洪攻擊

限制 ICMP 回顯請求

9. 多網卡策略路由

根據源 IP 使用特定的網絡接口

10. 容器和虛擬化環境

允許特定容器訪問外部網絡


iptables?是 Linux 操作系統中的一個非常強大的防火墻工具,它使用表格來組織防火墻規則,這些表格中的規則用于決定如何處理穿過防火墻的數據包。iptables?基于 Netfilter,Netfilter 是 Linux 內核的一個部分,負責處理通過網絡棧的所有數據包。通過使用?iptables,系統管理員可以定義規則,這些規則決定了如何處理進入、穿過和離開網絡的數據包。

一、iptables 的主要組成

表 (Tables)

iptables?的規則分布在不同的“表”中,這些表是處理特定類型數據包的集合。每個表包含一個或多個“鏈”,這些鏈定義了數據包流經網絡棧的不同點在何處應用這些規則。

  • filter?表

    • 用途: 主要用于決定數據包的基本處理,如是否允許數據包通過。
    • 包含的鏈:
      • INPUT: 處理進入本機的數據包。
      • FORWARD: 處理經過本機路由到其他網絡的數據包。
      • OUTPUT: 處理由本機產生的數據包。
  • nat?表

    • 用途: 用于網絡地址轉換(NAT),包括源地址和目標地址的轉換,主要用于路由設備。
    • 包含的鏈:
      • PREROUTING: 用于目標地址轉換(DNAT),處理進入網絡接口的數據包。
      • POSTROUTING: 用于源地址轉換(SNAT),處理即將離開網絡接口的數據包。
      • OUTPUT: 對于生成自本地進程的數據包,處理其目標地址轉換。
  • mangle?表

    • 用途: 用于修改數據包的服務類型(TOS)字段或其他 IP 頭信息,主要用于特殊的路由標記。
    • 包含的鏈:
      • PREROUTING: 修改進入網絡接口的數據包。
      • INPUT: 修改到達本機的數據包。
      • FORWARD: 修改經過本機的數據包。
      • OUTPUT: 修改本機產生的數據包。
      • POSTROUTING: 修改即將離開本機的數據包。
  • raw?表

    • 用途: 主要用于配置免除連接跟蹤的數據包,可以用來提高性能。
    • 包含的鏈:
      • PREROUTING: 設置進入網絡接口前的數據包是否避開狀態跟蹤。
      • OUTPUT: 設置由本機產生的數據包是否避開狀態跟蹤。
  • security?表

    • 用途: 用于設置強制訪問控制網絡規則,通常與 SELinux 安全策略配合使用。
    • 包含的鏈:
      • INPUT: 設置進入本機的數據包的安全標記。
      • FORWARD: 設置經過本機的數據包的安全標記。
      • OUTPUT: 設置本機產生的數據包的安全標記。
鏈 (Chains)

表中的每個鏈代表數據包處理的一個階段。預定義的鏈有:

  • PREROUTING: 用于處理進入網絡接口的數據包,主要用于?nat?和?mangle?表。
  • INPUT: 處理到達本機的數據包,用于?filter,?mangle, 和?security?表。
  • FORWARD: 處理經過本機路由到其他網絡的數據包,用于?filter,?mangle, 和?security?表。
  • OUTPUT: 處理本機產生的數據包,用于?filter,?nat,?mangle,?raw, 和?security?表。
  • POSTROUTING: 處理即將離開網絡接口的數據包,用于?nat?和?mangle?表。
規則 (Rules)

規則定義了對特定條件下的數據包應該執行的操作。每條規則都關聯到一個鏈,規則包含兩個主要部分:

  • 匹配條件: 定義了哪些數據包會被規則匹配。匹配條件可以包括多種屬性:

    • 源和目標 IP 地址 (-s,?-d)
    • 源和目標端口 (--sport,?--dport)
    • 協議類型 (-p), 如 TCP (tcp), UDP (udp), ICMP (icmp)
    • 網絡接口 (-i,?-o)
    • 更多復雜匹配,如連接狀態 (-m state --state), 包大小 (-m length --length), 時間段 (-m time --timestart)
  • 目標 (Targets): 當規則匹配到一個數據包時,定義了應采取的行動。常見的內置目標有:

    • ACCEPT: 允許數據包通過。
    • DROP: 靜默丟棄數據包,不給發送方任何響應。
    • REJECT: 拒絕數據包,并向發送方發送一個錯誤響應。
    • LOG: 記錄數據包的信息,然后繼續處理該數據包。
    • MASQUERADE: 用于動態 NAT,隱藏數據包的源 IP。
    • REDIRECT: 修改數據包的目標 IP/端口為本機,用于本地端口重定向。
用戶定義的鏈

用戶可以定義自己的鏈來組織復雜的規則集。這允許更靈活的管理,例如創建一個專用鏈處理特定類型的流量,然后在預定義鏈中調用這個用戶鏈。

二、常用 iptables 命令

iptables?是一個功能強大的工具,用于在 Linux 上管理網絡包過濾和 NAT 規則。以下是詳細解釋?iptables?的常用命令和參數,幫助你更好地理解如何使用這個工具。

基本 iptables 命令格式
iptables [option] [chain] [matching criteria] [action]
  • [option]: 指定命令的選項,如?-A?(添加)、-D?(刪除)、-L?(列出) 等。
  • [chain]: 指定規則應用于哪個鏈,如?INPUT,?FORWARD,?OUTPUT?等。
  • [matching criteria]: 指定匹配數據包的條件,如?-p tcp?(匹配 TCP 協議的數據包)。
  • [action]: 指定當匹配到數據包時執行的動作,如?-j ACCEPT?(接受數據包)。
查看規則
  • 查看所有規則

    iptables -L -n -v
    
    • -L: 列出所有規則。
    • -v: 顯示詳細信息,包括通過每條規則的數據包和字節數。
    • -n: 使用數字顯示 IP 地址和端口,不進行域名解析,以加快顯示速度。
  • 查看特定表的規則

    iptables -t nat -L
    
    • -t nat: 指定要查看的表,這里是?nat?表。
添加規則
  • 允許進入的 SSH 連接

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
    • -A INPUT: 在?INPUT?鏈末尾添加規則。
    • -p tcp: 匹配 TCP 協議的數據包。
    • --dport 22: 匹配目的端口為 22 的數據包。
    • -j ACCEPT: 對匹配的數據包執行?ACCEPT?動作。
  • 允許出去的 HTTP 連接

    iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
    
    • -A OUTPUT: 在?OUTPUT?鏈末尾添加規則。
    • -p tcp: 匹配 TCP 協議的數據包。
    • --dport 80: 匹配目的端口為 80 的數據包。
刪除規則
  • 刪除特定的規則

    iptables -D INPUT -p tcp --dport 22 -j ACCEPT
    
    • -D INPUT: 從?INPUT?鏈刪除規則。
    • 其余參數定義了要刪除的規則的匹配條件和動作。
  • 按編號刪除規則

    首先,使用?-L --line-numbers?查看規則及其編號:

    iptables -L INPUT -n --line-numbers
    

    然后,根據編號刪除規則:

    iptables -D INPUT 1
    
    • 刪除?INPUT?鏈中編號為 1 的規則。
修改規則
  • 使用編號修改規則

    iptables -R INPUT 1 -p tcp --dport 22 -j DROP
    
    • -R INPUT 1: 在?INPUT?鏈中替換編號為 1 的規則。
    • -p tcp --dport 22: 匹配 TCP 協議且目的端口為 22 的數據包。
    • -j DROP: 新的動作是丟棄數據包。
插入規則
  • 在鏈的特定位置插入規則

    iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
    
    • -I INPUT 1: 在?INPUT?鏈的第 1 位置插入規則。
    • -p tcp --dport 80: 匹配 TCP 協議且目的端口為 80 的數據包。
設置默認策略
  • 設置鏈的默認策略

    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    
    • -P INPUT DROP: 設置?INPUT?鏈的默認策略為?DROP
    • -P FORWARD DROP: 設置?FORWARD?鏈的默認策略為?DROP
    • -P OUTPUT ACCEPT: 設置?OUTPUT?鏈的默認策略為?ACCEPT
保存和恢復規則
  • 保存當前的規則

    iptables-save > /etc/iptables.rules
    
    • iptables-save: 輸出當前的?iptables?規則。
    • 重定向到?/etc/iptables.rules?文件中保存。
  • 從文件恢復規則

    iptables-restore < /etc/iptables.rules
    
    • iptables-restore: 從輸入讀取規則并應用。
    • /etc/iptables.rules: 包含要恢復的規則。
清空規則
  • 清空所有規則

    iptables -F
    
    • -F: 清空(Flush)所有鏈的所有規則。
  • 清空特定表的規則

    iptables -t nat -F
    
    • -t nat: 指定清空?nat?表的規則。
  • 刪除所有非默認鏈

    iptables -X
    
    • -X: 刪除所有用戶定義的鏈。
端口重定向和 NAT
  • 將外部端口 80 重定向到本地的 8080 端口

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    
    • -t nat: 在?nat?表操作。
    • -A PREROUTING: 在?PREROUTING?鏈末尾添加規則。
    • -p tcp --dport 80: 匹配目的端口為 80 的 TCP 數據包。
    • -j REDIRECT --to-port 8080: 重定向這些數據包到本機的 8080 端口。
  • 源 NAT (SNAT): 修改源 IP 地址

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
    • -A POSTROUTING: 在?POSTROUTING?鏈末尾添加規則。
    • -o eth0: 匹配從?eth0?網絡接口發出的數據包。
    • -j MASQUERADE: 對這些數據包執行地址偽裝,常用于動態 IP 地址。
  • 目標 NAT (DNAT): 修改目標 IP 地址

    iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
    
    • -A PREROUTING: 在?PREROUTING?鏈末尾添加規則。
    • -p tcp --dport 8080: 匹配目的端口為 8080 的 TCP 數據包。
    • -j DNAT --to-destination 192.168.1.10:80: 修改數據包的目標 IP 和端口。
高級匹配和限速
  • 防止 SSH 爆破攻擊

    為了防止 SSH 爆破,我們可以使用?recent?模塊來跟蹤來自同一 IP 地址的連接嘗試。如果在指定時間內超過了特定次數的連接嘗試,則暫時拒絕來自該 IP 的連接。

    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
    
    • -m state --state NEW: 只匹配新建連接。
    • -m recent --set: 對匹配的每個新連接,記錄其信息。
    • -m recent --update: 更新最近的信息,并檢查條件。
    • --seconds 60: 指定時間窗口為 60 秒。
    • --hitcount 10: 如果在 60 秒內同一 IP 嘗試新建連接超過 10 次,則匹配此規則。
    • -j DROP: 拒絕這些匹配的數據包。
日志記錄

iptables?支持將匹配的數據包信息記錄到系統日志中,這對于調試和安全監控非常有用。

  • 記錄被拒絕的數據包信息

    iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
    
    • -j LOG: 使用 LOG 目標記錄數據包信息。
    • --log-prefix "IPTables-Dropped: ": 指定日志記錄的前綴,便于在日志文件中搜索。
    • --log-level 4: 指定日志的級別(4 表示 warning 級別)。
狀態檢查

利用?state?模塊,可以匹配數據包的連接跟蹤狀態,這是構建復雜防火墻規則的基礎。

  • 允許基于狀態的數據包傳輸

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    • -m state --state ESTABLISHED,RELATED: 匹配狀態為?ESTABLISHED?或?RELATED?的數據包。
    • ESTABLISHED: 表示數據包是屬于已經建立的連接。
    • RELATED: 表示數據包是與現有的連接相關的(例如,FTP 數據連接)。
時間條件匹配

使用?time?模塊可以基于時間條件匹配數據包,這可以用于實現基于時間的訪問控制策略。

  • 只在工作時間允許 HTTP 訪問

    iptables -A INPUT -p tcp --dport 80 -m time --timestart 09:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
    
    • -m time: 使用時間模塊。
    • --timestart 09:00 --timestop 17:00: 指定允許匹配的開始和結束時間。
    • --weekdays Mon,Tue,Wed,Thu,Fri: 指定允許匹配的星期幾。
接口匹配

可以根據數據包使用的網絡接口進行匹配。

  • 允許來自特定接口的數據包

    iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
    
    • -i eth0: 只匹配通過?eth0?網絡接口進入的數據包。
    • -p tcp --dport 80: 匹配目的端口為 80 的 TCP 數據包。
用戶自定義鏈

用戶可以定義自己的鏈來組織規則,這可以使規則集更加結構化和模塊化。

  • 定義和使用自定義鏈

    iptables -N LOGGING
    iptables -A INPUT -j LOGGING
    iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "Input-Dropped: "
    iptables -A LOGGING -j DROP
    
    • -N LOGGING: 創建一個名為?LOGGING?的新鏈。
    • -A LOGGING -m limit --limit 2/min -j LOG: 在?LOGGING?鏈中,使用?limit?模塊限制日志記錄的速率,防止日志文件快速增長。
    • -j DROP: 在?LOGGING?鏈的最后,丟棄所有數據包。
保存和加載規則

iptables?規則默認在系統重啟后不會保存。你需要手動保存規則,并在系統啟動時加載它們。

  • 保存規則到文件

    iptables-save > /etc/iptables.rules
    
    • iptables-save: 輸出當前的所有?iptables?規則。
    • >: 重定向輸出到文件?/etc/iptables.rules
  • 加載規則從文件

    iptables-restore < /etc/iptables.rules
    
    • iptables-restore: 從給定的輸入加載?iptables?規則。
    • < /etc/iptables.rules: 從文件?/etc/iptables.rules?讀取規則。
清空和重置

有時你可能需要清空所有規則,重置?iptables?到初始狀態。

  • 清空所有規則和自定義鏈

    iptables -F
    iptables -X
    
    • -F: 清空所有鏈的所有規則。
    • -X: 刪除所有用戶定義的鏈。

三、使用場景舉例

使用?iptables?的場景非常多樣,覆蓋從簡單的主機防火墻到復雜的網絡路由和 NAT 配置。下面是一些具體的使用場景,展示如何利用?iptables?解決實際問題。

1. 基本的主機防護

在這個場景中,我們利用?iptables?設置基本的網絡訪問控制,以保護主機不受未授權訪問。

允許特定的服務訪問

假設你想在一臺服務器上開放 SSH (端口 22) 和 HTTP (端口 80) 服務,同時拒絕所有其他未經授權的入站連接。

# 設置默認策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT# 允許本地回環接口
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT# 允許已建立的和相關的連接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 允許 SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT# 允許 HTTP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT# Optional: 允許 HTTPS
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

2. 防止 DDoS 攻擊

使用?iptables?限制單個源 IP 的連接頻率,以防止簡單的 DDoS 攻擊或 SSH 爆破。

限制 SSH 連接嘗試
# 允許每個 IP 每分鐘最多新建 3 個 SSH 連接
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

這種設置能夠有效減少暴力破解 SSH 密碼的風險。

3. 端口轉發

在某些情況下,你可能需要將到達某個端口的流量重定向到另一個端口上,例如將 80 端口的 HTTP 流量轉發到 8080 端口。

將 80 端口轉發到 8080 端口
# 在 nat 表的 PREROUTING 鏈上添加規則
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

這個操作常用于服務器上運行的 Web 應用程序,該程序綁定于非標準端口,而你希望通過標準端口訪問。

4. 網絡地址轉換 (NAT)

在家庭或小型辦公室網絡中,經常需要設置 NAT 來共享訪問互聯網的路徑。以下是一個簡單的源 NAT(SNAT)配置的例子。

共享互聯網訪問

假設?eth1?是內部網絡接口,eth0?是連接到互聯網的接口。

# 啟用 IP 轉發
echo 1 > /proc/sys/net/ipv4/ip_forward# 設置 MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE# 允許內部網絡訪問外部
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT# 允許已建立的連接回流
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

這個配置允許內部網絡通過?eth0?接口訪問外部網絡。

5. 日志和審計

記錄某些類型的網絡活動對于調試和安全監控都是非常有用的。

記錄被拒絕的包
# 記錄被拒絕的入站連接嘗試
iptables -A INPUT -j LOG --log-prefix "IPTables-Input-Denied: " --log-level 4
# 記錄被拒繪的轉發連接嘗試
iptables -A FORWARD -j LOG --log-prefix "IPTables-Forward-Denied: " --log-level 4

這些規則會將所有被?INPUT?和?FORWARD?鏈拒絕的嘗試記錄到系統日志中。

6. 使用時間條件控制訪問

在某些環境中,你可能希望基于時間來控制網絡訪問。

在工作時間外允許 SSH 訪問
# 工作時間外允許 SSH
iptables -A INPUT -p tcp --dport 22 -m time --timestart 18:00 --timestop 09:00 -j ACCEPT

這條規則允許在晚上 6:00 到早上 9:00 之間進行 SSH 訪問。

7. 防火墻繞過

在某些情況下,你可能需要臨時開放或關閉防火墻的某些規則,而不是永久修改配置。

臨時開放所有訪問

如果需要臨時允許所有流量(例如,進行某些特殊操作),可以設置:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT# 清空所有規則
iptables -F

然后,在操作完成后,恢復原來的規則。

8. 防止 ICMP 泛洪攻擊

ICMP 泛洪是一種常見的拒絕服務攻擊方法。

限制 ICMP 回顯請求
# 限制 ICMP echo-request 消息
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

這些規則限制了每秒處理的 ICMP echo 請求(ping 請求)的數量,從而減輕了泛洪的影響。

9. 多網卡策略路由

在擁有多個網絡接口的服務器上,你可能需要根據數據包的來源或目的地來選擇不同的路由。

根據源 IP 使用特定的網絡接口
# 對于從特定源 IP 發出的數據包,使用特定接口
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j MASQUERADE

這個規則設置了源 NAT,允許從?192.168.100.0/24?網段出來的數據包通過?eth1?接口發送。

10. 容器和虛擬化環境

在使用 Docker 或其他容器技術時,經常需要配置?iptables?來管理和隔離網絡流量。

允許特定容器訪問外部網絡
# 假設容器的虛擬網絡接口是 veth1234
iptables -t nat -A POSTROUTING -s 172.17.0.2/32 -o eth0 -j MASQUERADE

這條規則允許 IP 地址為?172.17.0.2?的容器通過?eth0?接口訪問外部網絡。

通過這些場景,你可以看到?iptables?的多樣性和強大功能,它能夠滿足從簡單到復雜的多種網絡需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10544.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10544.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10544.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習筆記:【QC】Android Q qmi擴展nvReadItem/nvWriteItem

一、qmi初始化 流程圖 初始化流程: 1、主入口&#xff1a; vendor/qcom/proprietary/qcril-hal/qcrild/qcrild/rild.c int main(int argc, char **argv) { const RIL_RadioFunctions *(*rilInit)(const struct RIL_Env *, int, char **); rilInit RIL_Init; funcs rilInit…

孩子通過編程可以收獲什么?

編程是一種高度創造性的活動&#xff0c;它可以幫助孩子們培養出許多有價值的技能和品質。通過學習編程&#xff0c;孩子們可以收獲以下幾點&#xff1a; 邏輯思維能力 編程是一種需要嚴密的邏輯思維和分析能力的活動。在編程過程中&#xff0c;孩子們需要理清思路&#xff0c;…

李彥宏回顧大模型重構百度這一年

“大模型我們走在最前面&#xff0c;我們需要去勇闖無人區&#xff0c;需要去冒前人沒有冒過的風險。”近日&#xff0c;在百度一場內部頒獎活動中&#xff0c;百度創始人、董事長兼首席執行官李彥宏指出&#xff0c;百度一直堅信技術可以改變世界&#xff0c;會一直沿著這條路…

docker的centos容器使用yum報錯

錯誤描述 學習docker過程中&#xff0c;基于 centos 鏡像自定義新的鏡像。拉取一個Centos鏡像&#xff0c;并運行容器&#xff0c;容器安裝vim&#xff0c;報錯了。 報錯&#xff1a;Error: Failed to download metadata for repo appstream: Cannot prepare internal mirror…

python視頻轉碼腳本

今天有一個臨時的需求&#xff0c;就是需要將一個wmv的初步轉碼成mp4的格式。找了一圈&#xff0c;免費的工具少&#xff0c;即使有免費的工具&#xff0c;在功能上也是有所限制&#xff0c;或者會給你塞廣告或者附帶安裝其它流氓小游戲或者殺毒程序。 我并非不支持正版&#…

C++面向對象學習筆記五

本文主要講解運算符重載&#xff0c;由于白鳯大佬沒有具體講解&#xff0c;所以本文自行補充了運算符重載的相關知識 目錄 文章目錄 前言 運算符重載 加號運算符重載 左移運算符重載 遞增運算符重載 總結 前言 本文主要對于運算符重載進行探討&#xff0c;分別對于成員函數重…

JVM 類加載機制

JVM 類加載機制分為五個部分&#xff1a;加載&#xff0c;驗證&#xff0c;準備&#xff0c;解析&#xff0c;初始化&#xff0c;下面我們就分別來看一下這五個過程。 加載 加載是類加載過程中的一個階段&#xff0c;這個階段會在內存中生成一個代表這個類的 java.lang.class 對…

C語言經典例題-9

1.簡單計算器 題目描述&#xff1a; KK實現一個簡單計算器&#xff0c;實現兩個數的“加減乘除”運算&#xff0c;用戶從鍵盤輸入算式“操作數1運算符操作數2”&#xff0c;計算并輸出表達式的值&#xff0c;如果輸入的運算符號不包括在&#xff08;、-、*、/&#xff09;范圍…

Navicat Premium安裝pojie版

下載、安裝mysql&#xff0c;環境變量配置 1、官網下載mysql&#xff1a;https://www.mysql.com/downloads/ 下載成功&#xff0c;進行安裝 一直點下一步 驗證&#xff0c;開始中搜索mysql 說明安裝成功 環境變量配置 默認安裝路徑C:\Program Files\MySQL …

向量檢索和關鍵字檢索的區別?

向量檢索&#xff08;Vector Retrieval&#xff09;和關鍵字檢索&#xff08;Keyword Retrieval&#xff09;是信息檢索領域中常見的兩種檢索方法&#xff0c;它們有一些顯著的區別&#xff1a; 1、檢索方式&#xff1a; 向量檢索&#xff1a;向量檢索是基于文檔和查詢之間的相…

Kafka和Spark Streaming的組合使用學習筆記(Spark 3.5.1)

一、安裝Kafka 1.執行以下命令完成Kafka的安裝&#xff1a; cd ~ //默認壓縮包放在根目錄 sudo tar -zxf kafka_2.12-2.6.0.tgz -C /usr/local cd /usr/local sudo mv kafka_2.12-2.6.0 kafka-2.6.0 sudo chown -R qiangzi ./kafka-2.6.0 二、啟動Kafaka 1.首先需要啟動K…

計算機畢業設計Python地震預測系統 地震數據分析可視化 地震爬蟲 大數據畢業設計 Flink Hadoop 深度學習 機器學習 人工智能 知識圖譜

學生信息 姓名&#xff1a;  祁浩 題目&#xff1a; 基于Python的中國地震數據分析與可視化系統的設計與實現 學號&#xff1a; 2020135211 班級&#xff1a; 20大數據本科2班 指導教師&#xff1a; 劉思思 答辯過程 學生開題陳述 為了讓學習者更好的了解了解地震…

Coze扣子開發指南:AI零代碼編程創建插件

在Coze扣子中創建插件&#xff0c;有兩種方式&#xff0c;一是用API&#xff0c;具體方式參照上一篇文章《Coze扣子開發指南&#xff1a;用免費API自己創建插件》&#xff0c;還有一種方式就是編程&#xff0c;不過有了AI的幫助&#xff0c;即使不會編程的人&#xff0c;也可以…

HarmonyOS開發案例:【生活健康app之獲取成就】(3)

獲取成就 本節將介紹成就頁面。 功能概述 成就頁面展示用戶可以獲取的所有勛章&#xff0c;當用戶滿足一定的條件時&#xff0c;將點亮本頁面對應的勛章&#xff0c;沒有得到的成就勛章處于熄滅狀態。共有六種勛章&#xff0c;當用戶連續完成任務打卡3天、7天、30天、50天、…

用大于meilisearch-java-0.7.0.jar的報錯的解決

Elasticsearch 做為老牌搜索引擎&#xff0c;功能基本滿足&#xff0c;但復雜&#xff0c;重量級&#xff0c;適合大數據量。 MeiliSearch 設計目標針對數據在 500GB 左右的搜索需求&#xff0c;極快&#xff0c;單文件&#xff0c;超輕量。 所以&#xff0c;對于中小型項目來說…

阿里云服務器在線安裝nginx

??個人主頁: 蒾酒 &#x1f525;系列專欄&#xff1a;《nginx實戰》 目錄 內容簡介 安裝步驟 1.root用戶登錄連接阿里云服務器 2.在usr/local下新建nginx目錄 3.安裝 1安裝下載工具 2下載nginx壓縮包 3解壓 4安裝nginx依賴的庫 5編譯并安裝 6啟動nginx 7開啟…

藍橋杯-遞增三元組(三種解法,二分, 雙指針, 前綴和)

給定三個整數數組 A[A1,A2,…AN], B[B1,B2,…BN], C[C1,C2,…CN], 請你統計有多少個三元組 (i,j,k) 滿足&#xff1a; 1≤i,j,k≤N Ai<Bj<Ck 輸入格式 第一行包含一個整數 N。 第二行包含 N 個整數 A1,A2,…AN。 第三行包含 N 個整數 B1,B2,…BN。 第四行包含 N …

【圖像畸變校正】

接上篇文章&#xff1a;【魚眼&#xff0b;普通相機】相機標定 附代碼&#xff1a; 方法一&#xff1a; 使用cv2.undistort """Create May 11, 2024author Wang Jiajun """import cv2 import numpy as npdef correct(img,camera_fileE:/cali…

怎么使用遠程桌面傳輸文件?

微軟提供的遠程桌面功能是一項強大的工具&#xff0c;可讓您在同一網絡下遠程訪問和管理其他計算機。除了遠程控制&#xff0c;它還支持文件傳輸功能&#xff0c;為Windows用戶提供了極大的便利。在接下來的內容中&#xff0c;我們將介紹如何使用遠程桌面傳輸文件。 如何從遠程…

PADS:生成自交叉平面區域

根據板外形鋪銅方法&#xff1a; pads根據板外形鋪銅_鋪銅如何根據板子形狀改變-CSDN博客 根據板外形創建平面區域出現問題&#xff1a; 解決方法&#xff1a;去找結構&#xff0c;讓他把出圖之前把線合并了