Linux網路——配置防火牆的相關命令

来源:https://www.cnblogs.com/shamao/archive/2019/08/16/11363820.html
-Advertisement-
Play Games

Linux網路——配置防火牆的相關命令 摘要:本文主要學習瞭如何在Linux系統中配置防火牆。 iptables命令 iptables準確來講並不是防火牆,真正的防火牆是運行於系統內核中的netfilter,而iptables僅僅是操作netfilter的一個工具,其所負責的主要功能便是與用戶交互, ...


Linux網路——配置防火牆的相關命令

摘要:本文主要學習瞭如何在Linux系統中配置防火牆。

iptables命令

iptables準確來講並不是防火牆,真正的防火牆是運行於系統內核中的netfilter,而iptables僅僅是操作netfilter的一個工具,其所負責的主要功能便是與用戶交互,獲取到用戶的要求,並轉化成netfilter可以接受的信息。

鏈的概念

當客戶端訪問伺服器的WEB服務時,客戶端是起點,WEB服務所監聽的套接字(IP地址和埠)是終點。當WEB服務需要響應客戶端請求時,WEB服務所監聽的IP與埠變成了起點,客戶端變成了終點。

如果想要防火牆能夠達到防火的目的,就需要在內核中的netfilter框架里設置關卡,所有進出的報文都要通過這些關卡,經過檢查後,符合放行條件的才能放行,符合阻攔條件的則需要被阻止,於是就出現了INPUT關卡和OUTPUT關卡。如果客戶端發來的報文訪問的目標地址不是本機,而是其他伺服器,這個時候就會用到PREROUTING關卡、FORWARD關卡和POSTROUTING關卡。這些關卡在iptables中被稱之為鏈。

簡要說明:INPUT鏈、OUTPUT鏈主要用在“主機防火牆”中,即主要針對伺服器本機驚醒保護的防火牆。FORWARD鏈、PREROUTING鏈、POSTROUTING鏈多用在“網路型防火牆”中,例如使用Linux防火牆作為網關伺服器在公司與Inetnet之間進行安全控制。

鏈的詳細說明:

1 INPUT鏈表示當收到訪問防火牆本機地址的數據包(入站)時應用的規則。
2 OUTPUT鏈表示當防火牆本機向外發送數據包(出站)時應用的規則。
3 FORWARD鏈表示當接收到需要通過防火牆中轉發送給其他地址的數據包(轉發)時應用的規則。
4 PREROUTING鏈表示在對數據包做路由選擇之前應用的規則。
5 POSTROUTING鏈表示在對數據包做路由選擇之後應用的規則。

表的概念

每個經過這個關卡的報文,都要將這條鏈上的所有規則匹配一遍,如果有符合條件的規則,則執行規則對應的動作。但是每個鏈上的規則可能不止一個,所以把具有相同功能規則的集合叫做表,通過規則表管理規則。

預設的iptables規則表有:

1 filter表是iptables的預設表,用於過濾包,如果沒有自定義表,那麼就預設使用filter表。
2 nat表用於網路地址轉換。
3 mangle表用於指定如何處理數據包,它能修改數據標記位。
4 raw表可以實現不追蹤某些數據包,預設系統的數據包都會被追蹤,用於處理異常。
5 security表用於強制訪問控制(MAC)的網路規則,在CentOS中沒有該表。

規則表應用優先順序:security,raw,mangle,nat,filter。

各條規則的應用順序:鏈內部的過濾遵循“匹配即停止”的原則,如果對比完整個鏈也沒有找到和數據包匹配的規則,則會按照鏈的預設策略進行處理。

包過濾流程

安裝

CentOS的版本7中,預設沒有安裝iptables工具,所以需要手動安裝:

 1 [root@localhost ~]# yum install -y iptables-services
 2 ...
 3 =============================================================================================================================
 4  Package                             架構                     版本                              源                      大小
 5 =============================================================================================================================
 6 正在安裝:
 7  iptables-services                   x86_64                   1.4.21-28.el7                     base                    52 k
 8 為依賴而安裝:
 9  iptables                            x86_64                   1.4.21-28.el7                     base                   433 k
10 ...
11 完畢!
12 [root@localhost ~]# 

啟動服務

使用管理服務的systemctl命令,啟動並查看iptables服務:

 1 [root@localhost ~]# systemctl status iptables
 2 ● iptables.service - IPv4 firewall with iptables
 3    Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
 4    Active: inactive (dead)
 5 
 6 8月 16 10:38:38 localhost.localdomain systemd[1]: Stopped IPv4 firewall with iptables.
 7 8月 16 10:39:29 localhost.localdomain systemd[1]: Stopped IPv4 firewall with iptables.
 8 [root@localhost ~]# systemctl start iptables
 9 [root@localhost ~]# systemctl status iptables
10 ● iptables.service - IPv4 firewall with iptables
11    Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
12    Active: active (exited) since 五 2019-08-16 10:41:24 CST; 2s ago
13   Process: 1582 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
14  Main PID: 1582 (code=exited, status=0/SUCCESS)
15 
16 8月 16 10:41:24 localhost.localdomain systemd[1]: Starting IPv4 firewall with iptables...
17 8月 16 10:41:24 localhost.localdomain iptables.init[1582]: /usr/libexec/iptables/iptables.init:行22: /etc/init.d/func…或目錄
18 8月 16 10:41:24 localhost.localdomain iptables.init[1582]: iptables: Applying firewall rules: /usr/libexec/iptables/i…到命令
19 8月 16 10:41:24 localhost.localdomain systemd[1]: Started IPv4 firewall with iptables.
20 Hint: Some lines were ellipsized, use -l to show in full.
21 [root@localhost ~]# 

基本語法

1 iptables [指定表] [選項] [條件] -j [策略]

指定表說明

1 -t 表名:用來指定操作的表,有filter、nat、mangle或raw,預設使用filter。

選項說明

查看的選項:

1 -L 鏈名:查看指定表指定鏈的規則,不指定鏈則查看指定表的所有規則。
2 -v:查看詳細信息。
3 -n:以數字格式顯示主機地址和埠號。
4 -x:顯示計數器的精確值。
5 --line-numbers:查看規則時,顯示其在鏈上的編號。

管理規則的選項:

1 -A 鏈名:添加新規則於指定鏈的尾部。
2 -I 鏈名 數字:添加新規則於指定鏈的指定位置,預設為首部。
3 -R 鏈名 數字:替換指定的規則為新的規則。
4 -D 鏈名 數字:根據規則編號刪除規則。

管理鏈的選項:

1 -N 鏈名:新建一個自定義的規則鏈。
2 -X 鏈名:刪除指定表指定自定義鏈的規則,不指定鏈則刪除指定表的所有自定義鏈的規則。
3 -F 鏈名:清空指定表指定鏈的規則,不指定鏈則清空指定表的所有規則。
4 -E 原鏈名 新鏈名:重命名鏈。
5 -Z:清空鏈及鏈中預設規則的計數器。
6 -P 鏈名 策略, 設置鏈路的預設策略。

條件說明

1 -s IP地址:匹配源地址,這裡不能指定主機名稱,必須是IP。主要有3種,IP、IP/MASK、0.0.0.0/0.0.0.0。地址可以取反,加一個“!”表示除了哪個IP之外。
2 -d IP地址:匹配目標地址,規則同-s。
3 --sport 埠號-埠號:指定源埠,不能指定多個非連續埠,只能指定單個埠。
4 --dport 埠號-埠號:指定目標埠,規則同--sport。
5 -i 網卡:從指定網卡流入的數據,流入一般用在INPUT和PREROUTING上。
6 -o 網卡:從指定網卡流出的數據,流出一般在OUTPUT和POSTROUTING上。
7 -p 協議:匹配協議,這裡的協議通常有3種,TCP、UDP、ICMP。
8 -m 埠號,埠號:表示啟用多埠擴展。

策略說明

1 ACCEPT:接收數據包。
2 DROP:丟棄數據包。
3 REJECT:被拒絕時,提示被拒絕的原因。
4 REDIRECT:將數據包重新轉向到本機或另一臺主機的某一個埠,通常功能實現透明代理或對外開放內網的某些服務。
5 SNAT:源地址轉換。
6 DNAT:目的地址轉換。
7 MASQUERADE:IP偽裝。
8 LOG:日誌功能。

保存配置

1 [root@localhost ~]# service iptables save
2 iptables: Saving firewall rules to /etc/sysconfig/iptables:[  確定  ]
3 [root@localhost ~]# 

使用舉例

查看規則:

 1 [root@localhost ~]# iptables -nvL
 2 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 3  pkts bytes target     prot opt in     out     source               destination         
 4   584 45376 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 5     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
 6     0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 7     1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 8     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 9 
10 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
11  pkts bytes target     prot opt in     out     source               destination         
12     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
13 
14 Chain OUTPUT (policy ACCEPT 4 packets, 464 bytes)
15  pkts bytes target     prot opt in     out     source               destination         
16 [root@localhost ~]#

添加規則:

 1 [root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT
 2 [root@localhost ~]# iptables -nvL
 3 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 4  pkts bytes target     prot opt in     out     source               destination         
 5   754 57856 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 6     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
 7     0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 8     1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 9     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
10     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:3306
11 
12 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
13  pkts bytes target     prot opt in     out     source               destination         
14     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
15 
16 Chain OUTPUT (policy ACCEPT 4 packets, 592 bytes)
17  pkts bytes target     prot opt in     out     source               destination         
18 [root@localhost ~]#

刪除規則:

 1 [root@localhost ~]# iptables -D INPUT 6
 2 [root@localhost ~]# iptables -t filter -nvL
 3 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 4  pkts bytes target     prot opt in     out     source               destination         
 5   807 61588 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 6     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
 7     0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 8     1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 9     1   229 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
10 
11 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
12  pkts bytes target     prot opt in     out     source               destination         
13     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
14 
15 Chain OUTPUT (policy ACCEPT 19 packets, 2004 bytes)
16  pkts bytes target     prot opt in     out     source               destination         
17 [root@localhost ~]# 

firewalld命令

在CentOS系統的版本7中,firewalld防火牆取代了iptables防火牆,作為系統中netfilter內核模塊的管理工具。firewalld使用了daemon和service替代了iptables的service部分,其底層還是使用iptables的command作為防火牆規則管理入口。

同iptables比較

firewalld跟iptables比起來至少有兩大好處:

1)firewalld支持動態更新規則。使用iptables時,每一個單獨的更改都需要清空舊的規則並重新讀取所有規則,這種方式被稱為靜態防火牆件。而使用firewalld修改規則後,不需要重新載入所有規則,只需要將變更部分保存並更新到運行中的iptables即可,這種方式被稱為動態防火牆。

2)firewalld使用區域和服務而不是鏈式規則。即使不明白“五張表五條鏈”,而且對TCP/IP協議也不理解也可以實現大部分功能,在使用上要比iptables人性化很多。

配置方式

firewalld的配置方法主要有三種:圖形化工具、命令行工具、配置文件。

配置文件

firewalld的配置文件有兩個存儲位置:

1 /etc/firewalld/:用於用戶創建和自定義配置文件,覆蓋預設配置。
2 /usr/lib/firewalld/:用於預設和備用配置。

firewalld的配置文件結構非常簡單,主要包含兩個文件和三個目錄:

 1 文件firewalld.conf是主配置文件,只有5個配置項:
 2 1)DefaultZone表示使用的zone。預設值為public。
 3 2)MinimalMark表示標記的最小值。預設值為100。
 4 3)CleanupOnExit表示當退出firewalld後是否清除防火牆規則。預設值為yes。
 5 4)Lockdown表示是否可以通過lockdown-whitelist.xml文件操作firewalld。預設值為no。
 6 5)IPv6_rpfilter用來判斷所接受到的包是否是偽造的。預設值為yes。
 7 文件lockdown-whitelist.xml規定了當Lockdown為yes的時候,哪些程式可以對firewalld進行操作。
 8 文件direct.xml使用類似iptables的語法來進行規則的增刪,如果用到direct就會有這個文件。
 9 目錄zones用來保存zone配置文件。
10 目錄services用來保存service配置文件。
11 目錄icmptypes用來保存和icmp類型相關的配置文件。

區域(zone)說明

所謂的區域就是一個信賴等級,某一等級下對應有一套規則集。劃分方法包括:網路介面、IP地址、埠號等等。

一般情況下,會有如下的這些預設區域:

1 drop:丟棄所有進入的數據包。
2 block:拒絕所有進入的數據包。
3 public:只接受部分選定的數據包。
4 external:應用在NAT設定時的對外網路。
5 dmz:非軍事區。
6 work:使用在公司環境。
7 home:使用在家庭環境。
8 internal:應用在NAT設定時的對內網路。
9 trusted:接受所有的數據包。

查看用戶配置目錄里的zone配置文件:

1 [root@localhost ~]# ls /etc/firewalld/zones
2 public.xml
3 [root@localhost ~]# 

查看public.xml配置文件的內容:

1 [root@localhost ~]# cat /etc/firewalld/zones/public.xml 
2 <?xml version="1.0" encoding="utf-8"?>
3 <zone>
4   <short>Public</short>
5   <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
6   <service name="dhcpv6-client"/>
7   <service name="ssh"/>
8 </zone>
9 [root@localhost ~]# 

可以看到配置文件中僅開放了 dhcpv6-client 服務和 ssh 服務。

服務(service)說明

iptables時代習慣使用埠號來匹配規則,但是如果某一個服務的埠號改變了,那就要同時更改iptables的規則,十分不方便,同時也不方便閱讀理解。

service配置文件使用服務名來命名,比如ssh的配置文件是ssh.xml,可以通過修改配置文件的內容來實現對規則的修改。

查看ssh.xml配置文件的內容:

1 [root@localhost ~]# cat /usr/lib/firewalld/services/ssh.xml 
2 <?xml version="1.0" encoding="utf-8"?>
3 <service>
4   <short>SSH</short>
5   <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
6   <port protocol="tcp" port="22"/>
7 </service>
8 [root@localhost ~]#

名詞解釋

target:策略,當區域在處理包的時候,如果沒有顯式指明策略,則使用區域的target表示的策略。有四個可選值:default(不處理並返回上一級)、ACCEPT(通過)、%%REJECT%%(拒絕並回覆)、DROP(丟棄不回覆),預設為default。

service:服務。

port:埠,使用port可以不通過service而直接對埠進行設置。

interface:介面,可以理解為網卡。

source:源地址,可以是ip地址也可以是ip地址段。

icmp-block:icmp報文阻塞,可以按照icmp類型進行設置。

masquerade:ip地址偽裝,也就是按照源網卡地址進行NAT轉發。

forward-port:埠轉發。

rule:自定義規則。

匹配zone

對於一個接受到的請求具體使用哪個zone,firewalld是通過三種方法來判斷的:

1)source,請求報文的源地址。

2)interface,接收請求的網卡。

3)firewalld.conf中配置的預設zone。

基本語法

1 firewall-cmd [--zone=區域] [--permanent] [選項]

可選配置說明

1 --zone:指定區域,不指定則使用預設區域。
2 --permanent:是否將改動寫入到區域配置文件中。

選項說明

查看和更改狀態:

1 --state:查看防火牆的狀態。
2 --reload:重新載入防火牆,中斷用戶的連接,將臨時配置清掉,載入配置文件中的永久配置。
3 --complete-reload:重新載入防火牆,不中斷用戶的連接(防火牆出嚴重故障時使用)。

使用應急模式:

1 --panic-on:開啟緊急模式,強制關閉所有網路連接。
2 --panic-off:關閉緊急模式。
3 --query-panic:查看是否為應急模式。

查看和操作區域:

1 --get-zones:查看所有區域。
2 --get-default-zone:查看預設的區域。
3 --set-default-zone=區域:更改預設的區域。
4 --get-active-zones:查看正在使用的區域。

查看區域配置:

1 --list-all:查看區域的所有配置,類似於iptables -nL。
2 --list-all-zones:查看所有區域的所有配置。

反向查詢區域:

1 firewall-cmd --get-zone-of-interface=介面:根據介面查詢區域。
2 firewall-cmd --get-zone-of-source=IP地址/子網掩碼:根據地址查詢區域。

操作區域綁定的地址:

1 --list-sources:查看區域綁定的地址。
2 --add-source=IP地址/子網掩碼:添加地址綁定的區域,地址綁定過則報錯。
3 --remove-source=IP地址/子網掩碼:刪除地址綁定的區域。
4 --change-source=IP地址/子網掩碼:更新地址綁定的區域,地址沒有綁定則添加。
5 --query-source=IP地址/子網掩碼:查詢地址和區域是否綁定。

操作區域開放的介面:

1 --list-interfaces:查看區域開放的介面。
2 --add-interface=介面:添加區域開放的介面。
3 --remove-interface=介面:刪除區域開放的介面。
4 --change-interface=介面:更新區域開放的介面。
5 --query-interface=介面:查詢區域是否開放介面。

配置區域的策略:

1 --get-target:查詢區域的策略。--permanent是必選的。
2 --set-target=策略:設置區域的策略。--permanent是必選的。

配置區域的服務:

1 --list-services:查看區域啟用的服務。
2 --add-service=服務:在區域啟用服務。
3 --remove-service=服務:在區域禁用服務。
4 --query-service=服務:查看區域是否啟用服務。

配置區域的埠:

1 --list-ports:查看區域啟用的埠。
2 --add-port=埠號/協議:在區域啟用埠。
3 --remove-port=埠號/協議:在區域禁用埠。
4 --query-port=埠號/協議:查看區域是否啟用埠。

配置區域的埠轉發:

1 --list-forward-ports:查看區域的埠轉發。
2 --add-forward-port=port=本地埠號:proto=協議:toport=目標埠號:toaddr=目標IP/子網掩碼:添加區域的埠轉發。
3 --remove-forward-port=port=本地埠號:proto=協議:toport=目標埠號:toaddr=目標IP/子網掩碼:刪除區域的埠轉發。
4 --query-forward-port=port=本地埠號:proto=協議:toport=目標埠號:toaddr=目標IP/子網掩碼:查詢區域是否有埠轉發。

配置區域按照icmp類型進行阻塞:

1 --list-icmp-blocks:查看區域阻塞的icmp類型。
2 --add-icmp-blocks=icmptype:添加區域阻塞的icmp類型。
3 --remove-icmp-blocks=icmptype:刪除區域阻塞的icmp類型。
4 --query-icmp-blocks=icmptype:查詢icmp類型是否在區域阻塞。

配置地址轉換:

1 --add-masquerade:開啟SNAT(源地址轉換)。
2 --remove-masquerade:關閉SNAT(源地址轉換)。
3 --query-masquerade:查詢SNAT(源地址轉換)是否開啟。

通過rich規則配置區域:

1 --list-rich-rules:查看rich規則。
2 --add-rich-rule='rich規則':添加rich規則。
3 --remove-rich-rule='rich規則':刪除rich規則。
4 --query-rich-rule='rich規則':查詢查看單條rich規則。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、sed(stream editor): 作為行編輯器,對文本進行編輯(以行為單位) 預設顯示輸出所有文件內容 註意:sed編輯文件,卻不改變原文件 2、sed的工作原理: 指定一個文本文件,依次讀取文本文件每行的內容,讀取到模式空間中(PATTERN SPACE),在模式空間中進行文本匹配,對匹 ...
  • 彈出消息的bat,其實就是通過批處理調用msg命令,msg是系統自在的一個可以發送信息的命令。 示例: msg.exe命令是將消息發送給用戶。 MSG {username | sessionname | sessionid | @filename | *} [/SERVER:servername] ...
  • 一、交互輸入 1、命令用法:read a b c -> aa bb cc read命令同時可以定義多個變數值;而輸入的內容預設以空格為分隔符,將值輸入到對應的變數中;如果預設值輸入過多,最後所有的值都會被賦予給最後一個變數;如果輸入的值少於變數數,多餘的變數則為空值 2、常用參數: -p read ...
  • 七種bond模式說明:mod=0:(balance-rr) Round-robin policy(平衡掄迴圈策略)mod=1:(active-backup) Active-backup policy(主-備份策略)mod=2:(balance-xor) XOR policy(平衡策略)mod=3:b ...
  • 關於mmap 網上有很多有用的文章,我這裡主要記錄,日常使用到mmap時的理解: https://www.cnblogs.com/huxiao-tee/p/4660352.html 測試代碼: https://github.com/yaowenxu/Workplace/tree/master/mma ...
  • 介紹一下域環境搭建,域主要用於中大型企業,小型企業電腦數量不多,而中大型企業電腦比較多,使用域可以方便管理,安全性也比在工作組中安全 1.安裝完操作系統預設都屬於WORKGROUP工作組。 2.安裝活動目錄,在沒安裝之前登錄系統會把所有本地用戶都列出來。 3.安裝活動目錄之前要修改電腦描述跟計 ...
  • 使用類Unix系統的同學可能都對“ !”這個符號並不陌生,但是你真的瞭解它嗎? 這個符號的名稱,叫做”Shebang”或者”Sha bang”。長期以來,Shebang都沒有正式的中文名稱。Linux中國翻譯組的GOLinux將其翻譯為“釋伴”,即“解釋伴隨行”的簡稱,同時又是Shebang的音譯。 ...
  • bat中怎樣用Random產生1到10之間的一個隨機數? 當然是用%random%,示例: 獲得一定範圍內的隨機數,用%random%可以產生0到32767之間的隨機數,但是,如何才能得到一定範圍內的隨機數呢?通用的演算法公式如下: 通用的公式%random%%%(max-min+1)+min來產生[ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...