nis和kerberos相互勾結

来源:https://www.cnblogs.com/mfyang/archive/2018/11/28/10034636.html
-Advertisement-
Play Games

1.NIS部分 1.1 簡介 NIS(Network Information Service,or Yellow Page or YP) 網路信息服務,由sun公司開發並授權給unix供應商,最初稱為黃頁,簡稱YP,由於 British Telecom PLC公司優先註冊了Yellow Page商標 ...


1.NIS部分

1.1 簡介

    NIS(Network Information Service,or Yellow Page or YP) 網路信息服務,由sun公司開發並授權給unix供應商,最初稱為黃頁,簡稱YP,由於 British Telecom PLC公司優先註冊了Yellow Page商標,所以sun公司最終將其改名為NIS,但是其應用程式或腳本仍延用以yp開頭。
    NIS是一種應用層協議,以客戶端/伺服器端的方式工作,主要作用是在網路中提供輕型目錄服務,如存儲用戶或組帳號信息,電腦名信息等。就像windows中的AD,集中存儲用戶的帳號信息,電腦信息,這樣方便管理帳號,在中大型企業中應用廣泛。當然NIS不僅可以進行帳號的統一管理,還可以結合kerberos做應用服務的驗證,如:ftp ssh等。

1.2 NIS架構

    NIS服務是C/S模式,NIS伺服器可以多台,分為master/slave模式,主伺服器負責資料庫製作管理,從伺服器負責從主伺服器更新數據並且提供與master 相同的查尋功能!
    NIS的伺服器集中維護用戶的賬號信息,當NIS客戶機需要進行用戶登錄的信息驗證時,就向NIS伺服器發出查詢請求。當系統中的一臺NIS伺服器為多台NIS客戶機提供服務時,用戶登錄系統中的任何一臺NIS客戶機都會從NIS伺服器進行登錄驗證,這樣就實現了集中管理用戶賬號的功能。
    在NIS伺服器的資料庫中主要包含以下幾類信息:用戶賬號信息,組賬號信息,IP地址和主機名稱對應記錄的信息,這些信息被保存在不同的資料庫文件中進行集中的管理。

1.3 NIS工作原理

  • NIS伺服器根據本地保存的系統信息,製作資料庫文件
  • NIS主輔伺服器進行數據同步,主可以主動推送到從,從也可以主動找主更新
  • 客戶端向NIS伺服器發送請求(先從本地驗證,找不到再向伺服器請求)
  • 客戶端選擇處於存活狀態且為yp.conf指定的NIS伺服器,該伺服器響應請求,如果客戶端廣播,則有ypbind進程查詢NIS伺服器,響應最快的伺服器將與客戶端通信。

    1.4 NIS應用程式及配置文件

    1.4.1 服務端

    1.4.1.1 服務端主要守護進程及功能
  • /lib/systemd/system/ypserv.service
      NIS伺服器提供的主要服務
  • /lib/systemd/system/ypxfrd.service
      用於NIS主從數據同步
  • /lib/systemd/system/yppasswdd.service
      通過此服務,NIS客戶端登錄的用戶可以直接修改在NIS伺服器上的密碼
  • /lib/systemd/system/ypbind.service
      用於提供埠綁定服務 ##### 1.4.1.2 服務端主配置文件
  • /etc/ypserv.conf 
      關鍵配置文件,規範NIS客戶端登錄許可權等。

    1.4.2 客戶端

    NIS客戶端配置文件

  • /etc/hosts 
      主機名與IP地址對應關係
  • /etc/yp.conf 
      ypbind的主要配置文件,設定NIS Server
  • /etc/nsswitch.conf
       重要的配置文件,設定帳號密碼等信息

    2 kerberos部分

    2.1 簡介

        kerberos希臘語是看門狗的意思,由MIT研發,目前最新版應該第5版。kerberos驗證過程有點複雜,曾經MIT在1988年寫了一篇有趣的文章,使用對話的方式將整個過程描述出來,它就是雅典娜和歐里庇得斯的對話,有興趣的朋友可以去閱讀一下,可以很好的幫助理解kerberos。

    2.2 名詞術語

  • KDC   指kerberos伺服器
  • principal
      指存放於kerberos伺服器中的條目,包括用戶條目,服務條目。常見條目寫法如下:
    條目寫法
    user : user/描述@xxx.com
    ftp server: ftp/[email protected]
    ssh server: host/[email protected]
    telnet ser: host/[email protected]
    nfs server: nfs/[email protected]
  • TGT 票據授權票

    2.3 工作原理

        kerberos驗證過程分為2步,初始驗證過程和票據驗證過程

    2.3.1 初始驗證過程

  • 1. 用戶輸入用戶名和密碼
  • 2. client登錄程式向kdc發送請求
  • 3. kdc知道用戶的密碼併發給client一張以用戶密碼加密過的TGT
  • 4. client用自己的密碼解開了KDC發給以自己的加密過的TGT並將票據存在本地,此時完成驗證,允許登錄

    2.3.2 票據驗證過程

    以client請求登錄ssh服務為例:

  • 1. client向KDC發送服務驗證請求
  • 2. kdc向client發送1個以TGT加密過的ticket和1個以服務密碼加密過的ticket
  • 3. client收到ticket後用存在本地的TGT進行解密,再將解密後的ticket加上一個時間戳加密形成ticket2和以服務密碼加密過的ticket一起發給ssh伺服器
  • 4. ssh伺服器用自己的服務密碼解開ticket,有了ticket便可以解開ticket2從而解開時間戳,完成整個驗證過程。

    3 實驗部分

    3.1 實驗環境

    IP主機名功能
    192.168.5.10 master.example.com NIS主伺服器master+kerberos服務
    192.168.5.11 node1.example.com NIS從伺服器slave
    192.168.5.12 node2.example.com ssh server+kerberos workstation
    192.168.5.13 node3.example.com nis client+kerberos workstation

    3.2 功能實現

  • 實現NIS主從伺服器數據同步及查詢功能
  • 實現node3以NIS伺服器中用戶sshu帳號登錄本機
  • 實現node3以NIS伺服器中用戶sshu帳號ssh到node2免密碼

    3.3 NIS主從架構實驗

    3.3.1 軟體包安裝

  • 在master和node1上安裝NIS服務端和客戶端軟體包:
    [root@master ~]# yum install -y ypserv yp-tools
    [root@node1 ~]# yum install -y ypserv yp-tools
    
  • 在node3上安裝NIS客戶端軟體包:
    [root@node3 ~]# yum install -y yp-tools
    

    3.3.2 啟動rpcbind服務

  • 在master和node1上啟動為rpcbind服務並設置為開機自啟動
    [root@master ~]# systemctl start rpcbind
    [root@master ~]# systemctl enable rpcbind
    [root@node1 ~]# systemctl start rpcbind
    [root@node1 ~]# systemctl enable rpcbind
    
  • 查看rpcbind服務情況
    [root@master ~]# rpcinfo -p localhost
       program vers proto   port  service
        100000    4   tcp    111  portmapper
        100000    3   tcp    111  portmapper
        100000    2   tcp    111  portmapper
        100000    4   udp    111  portmapper
        100000    3   udp    111  portmapper
        100000    2   udp    111  portmapper
    

    3.3.3 修改相關配置文件

  • 在master上編輯/etc/sysconfig/network文件,添加如下內容 主要設置主機名和nisdomain ``` HOSTNAME=master.example.com NISDOAMIN=master.example.com ```
  • 在master和node1上修改/etc/hosts文件
    [root@master ~]# cat /etc/hosts
    192.168.5.10   master  master.example.com
    192.168.5.11   node1  node1.example.com
    192.168.5.12   node2  node2.example.com
    192.168.5.13   node3  node3.example.com
    
  • 配置/var/yp/ypservers
    [root@master yp]# cat /var/yp/ypservers 
    master
    node1
    
  • 修改/var/yp/Makefile文件
    NOPUSH=false  #允許主伺服器向從伺服器傳遞資料庫文件
    

    3.3.4 啟動nis服務

  • 在master和node1上啟動nis服務並設置為開機自啟動
    [root@master yp]# systemctl restart ypserv
    [root@master yp]# systemctl restart ypbind
    [root@master yp]# systemctl restart yppasswdd
    [root@master yp]# systemctl restart ypxfrd
    
  • 從伺服器的配置只需將主伺服器的yp.conf文件拷貝過來即可,並啟動4個服務 #### 3.3.5 初始化NIS資料庫並添加用戶信息
  • 在master上初始化NIS資料庫
    [root@master ~]# /usr/lib64/yp/ypinit -m
    
    At this point, we have to construct a list of the hosts which will run NIS
    servers.  master is in the list of NIS server hosts.  Please continue to add
    the names for the other hosts, one per line.  When you are done with the
    list, type a <control D>.
    	next host to add:  master
    	next host to add:  
    ctrl+d保存
    The current list of NIS servers looks like this:
    
    master
    
    Is this correct?  [y/n: y]  y
    We need a few minutes to build the databases...
    Building /var/yp/master.example.com/ypservers...
    Running /var/yp/Makefile...
    gmake[1]: Entering directory `/var/yp/master.example.com'
    Updating passwd.byname...
    Updating passwd.byuid...
    Updating group.byname...
    Updating group.bygid...
    Updating hosts.byname...
    Updating hosts.byaddr...
    Updating rpc.byname...
    Updating rpc.bynumber...
    Updating services.byname...
    Updating services.byservicename...
    Updating netid.byname...
    Updating protocols.bynumber...
    Updating protocols.byname...
    Updating mail.aliases...
    gmake[1]: Leaving directory `/var/yp/master.example.com'
    
    master has been set up as a NIS master server.
    
    Now you can run ypinit -s master on all slave server.
    

    最終在/var/yp目錄下生成資料庫文件,查看一下

    [root@master ~]# ls /var/yp/
    Makefile  master.example.com  ypservers
    [root@master ~]# ls /var/yp/master.example.com/
    group.bygid   mail.aliases   protocols.byname    services.byname
    group.byname  netid.byname   protocols.bynumber  services.byservicename
    hosts.byaddr  passwd.byname  rpc.byname          ypservers
    hosts.byname  passwd.byuid   rpc.bynumber
    
  • 新建一個用戶帳戶
    [root@master ~]# useradd sshu
    [root@master ~]# passwd sshu
    Changing password for user sshu.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
  • 將新建帳戶添加到NIS資料庫中
    [root@master ~]# make -C /var/yp/
    make: Entering directory `/var/yp'
    gmake[1]: Entering directory `/var/yp/master.example.com'
    Updating passwd.byname...
    Updating passwd.byuid...
    Updating group.byname...
    Updating group.bygid...
    Updating netid.byname...
    gmake[1]: Leaving directory `/var/yp/master.example.com'
    make: Leaving directory `/var/yp'
    

    使用NIS客戶端工具查看資料庫信息已經有了剛添加的sshu用戶信息

    [root@master ~]# ypcat -d master.example.com -h master.example.com passwd
    sshu:$6$WrW8Lw06$/.WxYeOBxJ02aV0u3SVzeZ2sz/2csruFdmUcjYbEiA/vLhorYVC2XCUOpGEKpuG1ImGFq87BL61sy4puUWNLO1:1000:1000::/home/frank:/bin/bash
    
  • 在node1從伺服器上同步主伺服器的全部文件
    [root@node1 ~]# /usr/lib64/yp/ypinit -s master
    We will need a few minutes to copy the data from master.
    Transferring netid.byname...
    Trying ypxfrd ... success
    
    Transferring group.bygid...
    Trying ypxfrd ... success
    
    Transferring group.byname...
    Trying ypxfrd ... success
    
    Transferring passwd.byuid...
    Trying ypxfrd ... success
    
    Transferring passwd.byname...
    Trying ypxfrd ... success
    
    Transferring mail.aliases...
    Trying ypxfrd ... success
    
    Transferring protocols.byname...
    Trying ypxfrd ... success
    
    Transferring protocols.bynumber...
    Trying ypxfrd ... success
    
    Transferring services.byservicename...
    Trying ypxfrd ... success
    
    Transferring services.byname...
    Trying ypxfrd ... success
    
    Transferring rpc.bynumber...
    Trying ypxfrd ... success
    
    Transferring rpc.byname...
    Trying ypxfrd ... success
    
    Transferring hosts.byaddr...
    Trying ypxfrd ... success
    
    Transferring hosts.byname...
    Trying ypxfrd ... success
    
    Transferring ypservers...
    Trying ypxfrd ... success
    
    
    node1's NIS data base has been set up.
    If there were warnings, please figure out what went wrong, and fix it.
    
    At this point, make sure that /etc/passwd and /etc/group have
    been edited so that when the NIS is activated, the data bases you
    have just created will be used, instead of the /etc ASCII files.
    
  • 在從伺服器上查看是否有sshu用戶
    [root@node1 ~]# ypcat -h node1.example.com passwd
    frank:$6$WrW8Lw06$/.WxYeOBxJ02aV0u3SVzeZ2sz/2csruFdmUcjYbEiA/vLhorYVC2XCUOpGEKpuG1ImGFq87BL61sy4puUWNLO1:1000:1000::/home/frank:/bin/bash
    sshu:$6$K6XRNhSk$st/0cfN6GAq8maTFlPQktxqQwKFPLeOQ97JpqkApQ9EwzwKqsNzIo5OEYeyv9LFMD6bU25367BYeuv4NsjSOy1:1001:1001::/home/u123:/bin/bash
    

    表明數據同步成功,當然不可能每次都要手動同步,設置個定時任務計劃便可以解決這個問題。

    3.3.6 主從同步配置

    在master伺服器上添加任務計劃

    5 * * * * /usr/sbin/yppush -h node1.example.com passwd.byname
    5 * * * * /usr/sbin/yppush -h node1.example.com passwd.byuid
    5 * * * * /usr/sbin/yppush -h node1.example.com group.byname
    5 * * * * /usr/sbin/yppush -h node1.example.com group.bygid
    

    3.3.7 客戶端登錄驗證

  • 將node3配置為使用nis驗證 ``` [root@node3 ~]# cat /etc/yp.conf # /etc/yp.conf - ypbind configuration file # Valid entries are # # domain NISDOMAIN server HOSTNAME # Use server HOSTNAME for the domain NISDOMAIN. domain master.example.com server master.example.com domain master.example.com server node1.example.com ```
  • 更改驗證方式
    [root@node3 ~]# authconfig-tui
    

    通過終端登錄測試  OK 驗證成功

    3.3.8 NIS資料庫訪問安全性

    可以以/var/yp/目錄下創建securenets文件來限制網路主機查看NIS伺服器的資料庫

    [root@master yp]# vi securenets
    [root@master yp]# cat !$
    cat securenets
    255.255.255.255 192.168.5.11
    

    表示允許5.11的主機可以查看NIS資料庫

  • 到5.11上驗證:查詢成功
    [root@node1 ~]# ypcat -d master.example.com -h master.example.com passwd
    frank:$6$WrW8Lw06$/.WxYeOBxJ02aV0u3SVzeZ2sz/2csruFdmUcjYbEiA/vLhorYVC2XCUOpGEKpuG1ImGFq87BL61sy4puUWNLO1:1000:1000::/home/frank:/bin/bash
    [root@node1 ~]# ifconfig | grep inet |grep 192
            inet 192.168.5.11  netmask 255.255.255.0  broadcast 192.168.5.255
    
  • 到5.12上再試一下:查詢失敗
    [root@node2 ~]# ifconfig |grep inet |grep 5.12
            inet 192.168.5.12  netmask 255.255.255.0  broadcast 192.168.5.255
    [root@node2 ~]# ypcat -d master.example.com -h master.example.com passwd
    No such map passwd.byname. Reason: No such map in server's domain
    

    3.4 NIS+kerberos實現應用服務驗證

    3.4.1 安裝kerberos

    在master上安裝 krb5-server krb5-workstation,在node2和node3安裝krb5-workstation

    [root@master ~]# yum -y install krb5-server krb5-workstation
    [root@node2 ~]# yum -y install  krb5-workstation
    [root@node3 ~]# yum -y install  krb5-workstation
    

    3.4.2 配置kerberos

  • 在master上編輯/etc/krb5.conf
    [realms] //表示域 
    # EXAMPLE.COM = {
    #  kdc = kerberos.example.com
    #  admin_server = kerberos.example.com
    # }
     MASTER.EXAMPLE.COM = {       //功能變數名稱稱隨便寫,一般大寫,可以和NIS功能變數名稱不同
      kdc = 192.168.5.10             //kdc主機地址
      admin_server = 192.168.5.10    //管理主機地址
     }
    [domain_realm]
     .example.com = MASTER.EXAMPLE.COM  //表示後輟為example.com所有域成員
    

    這個配置文件凡是裝有krb5-workstation的主機都要有一份

    [root@master ~]# for i in {2,3};do scp /etc/krb5.conf node$i:/etc/krb5.conf;done
    root@node2's password: 
    krb5.conf                               100%  835   121.9KB/s   00:00    
    root@node3's password: 
    krb5.conf                               100%  835   280.8KB/s   00:00  
    
  • 在master上編輯/var/kerberos/krb5kdc/kdc.conf
    [root@master ~]# vi /var/kerberos/krb5kdc/kdc.conf
    [kdcdefaults]
     kdc_ports = 88
     kdc_tcp_ports = 88
    
    [realms]
     EXAMPLE.COM = {
      master_key_type = aes256-cts    //取消本行的註釋
      default_principal_flags = +preauth  //增加本行,表示預驗證
      acl_file = /var/kerberos/krb5kdc/kadm5.acl
      dict_file = /usr/share/dict/words
      admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
      supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
     }
    
  • 在master上編輯/var/kerberos/krb5kdc/kadm5.acl
    [root@master ~]# vi /var/kerberos/krb5kdc/kadm5.acl
    
    */[email protected]      *
    第一*表示用戶,第二*表示許可權
    許可權可選擇的配置列表如下:
    a: 允許增加principal或訪問策略
    A: 不允許增加principal或訪問策略
    c: 允許變更principals的密碼
    C: 不允許變更princials的密碼
    d: 允許刪除principals或策略
    D: 不允許刪除principals或策略
    i: 允許查看資料庫
    I: 不允許查看資料庫
    l: 允許列出principals或策略列表
    L: 不允許列出principals或策略
    m: 允許修改principals或策略
    M: 不允許修改principals或策略
    p: 允許傳播(propagationprincipal資料庫
    P: 不允許傳播principal資料庫
    u: 允許創建使用PAM進行密碼驗證的單一組件用戶principal
    U: 否決u的許可權
    x: a,d,m,c,i,l許可權的快捷方式
    *: x一樣
    

    這裡的admin帳號系統中還沒有,需要後面創建

  • 在master上生成kerberos資料庫
    [root@master ~]# kdb5_util create -r MASTER.EXAMPLE.COM -s
    Loading random data
    Initializing database '/var/kerberos/krb5kdc/principal' for realm 'MASTER.EXAMPLE.COM',
    master key name 'K/M@MASTER.EXAMPLE.COM'
    You will be prompted for the database Master Password.
    It is important that you NOT FORGET this password.
    Enter KDC database master key:   //提示輸入KDC資料庫密碼,不能忘記
    Re-enter KDC database master key to verify: 
    
  • 在master上啟動服務
    [root@master ~]# systemctl start krb5kdc && systemctl enable krb5kdc
    Job for krb5kdc.service failed because the control process exited with error code. See "systemctl status krb5kdc.service" and "journalctl -xe" for details.
    

    出了錯,先看看日誌

    [root@master ~]# tail /var/log/krb5kdc.log 
    krb5kdc: Configuration file does not specify default realm - while attempting to retrieve default realm
    krb5kdc: Configuration file does not specify default realm - while attempting to retrieve default realm
    krb5kdc: Configuration file does not specify default realm - while attempting to retrieve default realm
    

    日誌說配置文件里沒有預設的域 在/etc/krb5.conf配置文件里檢查下,果然是有一行預設域被註釋

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

-Advertisement-
Play Games
更多相關文章
  • 基於01和02 要得到如圖所示的熱力地圖(我從NuGet上下載的包沒有heatmap.js文件,沒法直接搞熱力圖,只好暫時先搞著地圖。後面儘量搞一下),一般要設置四個參數——title、tooltip、toolbox、series title其實是所有圖表共用的。tooltip也是如此,之前寫過此處 ...
  • 原鏈接: "UWP忽略短時間內重覆觸發的事件 超威藍火" 做移動端開發的可能都會遇到這種需求,當用戶點擊一個按鈕之後,由於沒有非同步,或者設備性能很差等等原因,程式卡住了。但是用戶不知道是咋回事啊,就開始狂點按鈕,結果請求很多次資源,或者構造了很多重覆視圖。安卓上有很多介紹如何忽略重覆點擊的情況,uw ...
  • 在介紹AOP之前,想必很多人都聽說AOP是基於動態代理和反射來實現的,那麼在看AOP之前,你需要弄懂什麼是動態代理和反射及它們又是如何實現的。 想瞭解JDK的動態代理及反射的實現和源碼分析,請參見下麵三篇文章 JDK的動態代理源碼分析之一 (http://blog.csdn.net/weililan ...
  • 後續每一類圖表,若無特殊說明,都將建立在01的基礎上,修改參數option,且參數均以json的格式 要形成如圖所示的字元雲,一般需要設置兩個大參數——title和series 其中,title就是圖中title箭頭指向的那個。它有兩個常用屬性:text和link。text就是顯示出來的文字,lin ...
  • 什麼是cron? Cron是linux系統中用來定期執行或指定程式任務的一種服務或軟體。與它相關的有兩個工具:crond 和 crontab。crond 就是 cron 在系統內的宿主程式,crontab 是管理 cron 任務的管理工具。一般情況下,我們安裝完centos5/6 linux系操作系 ...
  • chattr: 加鎖文件,無修改,無刪除許可權。 常用參數: +a: 可給文件追加內容,但無法刪除。 +i 加鎖文件(文件不能被刪除、改名、設定鏈接關係,同時不能寫入或追加內容) -i 解鎖文件(與+i相反) 常用參數用法: 加鎖:chattr +i 文件 查看加鎖: lsattr 文件 +i 加鎖文 ...
  • write 作用:給其它的線上用戶發送消息 格式:write [ 用戶名 ] [ tty ] 註意點:使用之前最好使用 who 命令查看當前線上用戶,tty 為埠號 使用舉例: 在游標閃爍的地方輸入內容,使用 CTRL+D 保存結束髮送 wall 作用:以廣播的方式向系統中所有用戶發送消息 格式: ...
  • 自考本科,操作系統是管理電腦硬體與軟體資源的電腦程式,同時也是電腦系統的內核與基石。操作系統需要處理如管理與配置記憶體、決定系統資源供需的優先次序、控制輸入與輸出設備、操作網路與管理文件系統等基本事務。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...