主頁 >  其他 > Kubernetes(十八) kube-proxy 詳解

Kubernetes(十八) kube-proxy 詳解

2020-09-14 21:26:15 其他

前言

在kubernets集群的每個節點上都運行著kube-proxy行程,負責實作Kubernetes中service組件的虛擬IP服務,目前kube-proxy有如下三種作業模式:

  • User space 模式
  • iptables 模式
  • IPVS 模式
  1. User space模式

    在這種模式下,kube-proxy通過觀察Kubernetes中service和endpoint物件的變化,當有新的service創建時,所有節點的kube-proxy在node節點上隨機選擇一個埠,在iptables中追加一條把訪問service的請求重定向到這個埠的記錄,并開始監聽這個埠的連接請求,

    比如說創建一個service,對應的IP:1.2.3.4,port:8888,kube-proxy隨機選擇的埠是32890,則會在iptables中追加

    -A PREROUTING -j KUBE-PORTALS-CONTAINER
    
    -A KUBE-PORTALS-CONTAINER -d 1.2.3.4/32 -p tcp --dport 8888 -j REDIRECT --to-ports 32890
    
    

    KUBE-PORTALS-CONTAINER 是kube-proxy在iptable中創建的規則鏈,在PREROUTING階段執行

    執行程序:

    • 當有請求訪問service時,在PREROUTING階段,將請求jumpKUBE-PORTALS-CONTAINER
    • KUBE-PORTALS-CONTAINER中的這條記錄起作用,把請求重定向到kube-proxy剛監聽的埠32890上,資料包進入kube-proxy行程內,
    • 然后kube-proxy會從這個service對應的endpoint中根據SessionAffinity來選擇一個作為真實服務回應請求,

    這種模式的缺點就是,請求資料需要到kube-proxy中,就是用戶空間中,才能決定真正要轉發的實際服務地址,性能會有損耗,并且在應用執行程序中,kube-proxy的可用性也會影響系統的穩定

  2. iptables 模式(目前kube-proxy默認的作業模式)

    在這種模式下,kube-proxy通過觀察Kubernetes中service和endpoint物件的變化,當有servcie創建時,kube-proxy在iptables中追加新的規則,對于service的每一個endpoint,會在iptables中追加一條規則,設定動作為DNAT,將目的地址設定成真正提供服務的pod地址;再為servcie追加規則,設定動作為跳轉到對應的endpoint的規則上,

    默認情況下,kube-proxy隨機選擇一個后端的服務,可以通過iptables中的 -m recent 模塊實作session affinity功能,通過 -m statistic 模塊實作負載均衡時的權重功能

    比如說創建了一個service,對應的IP:1.2.3.4,port:8888,對應一個后端地址:10.1.0.8:8080,則會在iptables中追加(主要規則):

     -A PREROUTING -j KUBE-SERVICES
    
    -A KUBE-SERVICES -d 1.2.3.4/32 -p tcp –dport 8888 -j KUBE-SVC-XXXXXXXXXXXXXXXX
    
    -A KUBE-SVC-XXXXXXXXXXXXXXXX -j KUBE-SEP-XXXXXXXXXXXXXXXX
    
    -A KUBE-SEP-XXXXXXXXXXXXXXXX -p tcp -j DNAT –to-destination 10.1.0.8:8080
    
    

    KUBE-SERVICES 是kube-proxy在iptable中創建的規則鏈,在PREROUTING階段執行

    執行程序:

    • 當請求訪問service時,iptables在prerouting階段,將講求jump到KUBE-SERVICES,
    • 在KUBE-SERVICES 中匹配到上面的第一條準則,繼續jump到KUBE-SVC-XXXXXXXXXXXXXXXX,
    • 根據這條準則jump到KUBE-SEP-XXXXXXXXXXXXXXXX,
    • 在KUBE-SEP-XXXXXXXXXXXXXXXX規則中經過DNAT動做,訪問真正的pod地址10.1.0.8:8080,

    在這種邏輯下,資料轉發都在系統內核層面做,提升了性能,并且即便kube-proxy不作業了,已經創建好的服務還能正常作業 ,但是在這種模式下,如果選中的第一個pod不能回應,請求就會失敗,不能像userspace模式,請求失敗后kube-proxy還能對其他endpoint進行重試,

    這就要求我們的應用(pod)要提供readiness probes功能,來驗證后端服務是否能正常提供服務,kube-proxy只會將readiness probes測驗通過的pod寫入到iptables規則中,以此來避免將請求轉發到不正常的后端服務中,

  3. IPVS 模式

    1. 介紹
      由于在iptables模式中,kube-proxy需要為每一個服務,每一個endpoint都生成相應的iptables規則,當服務規模很大時,性能也將顯著下降,因此kubernetes在1.8引入了IPVS模式,1.9版本中變成beta,在1.11版本中成為GA,

      在IPVS模式下,kube-proxy觀察Kubernetes中service和endpoint物件的變化,通過呼叫netlink介面創建相應的IPVS規則,并周期性的對Kubernetes的service、endpoint和IPVS規則進行同步,當訪問一個service時,IPVS負責選擇一個真實的后端提供服務,

      IPVS模式也是基于netfilter的hook功能(INPUT階段),這點和iptables模式是一樣的,但是用的是內核作業空間的hash表作為存盤的資料結構,在這種模式下,iptables可通過ipset來驗證具體請求是否滿足某條規則,在service變成時,只用更新ipset中的記錄,不用改變iptables的規則鏈,因此可以保證iptables中的規則不會隨著服務的增加變多,在超大規模服務集群的情況下提供一致的性能效果,

      在對規則進行同步時的性能也要高于iptables(只用對特定的一個hash表進行更新,而不是像iptables模式下對整個規則表進行操作),所以能提供更高的網路流量,

      IPVS在對后端服務的選擇上也提供了更多靈活的演算法:

      • rr: round-robin
      • lc: least connection (最少連接數演算法)
      • dh: destination hashing(目的hash演算法)
      • sh: source hashing(原地址hash演算法)
      • sed: shortest expected delay(最短延遲演算法)
      • nq: never queue

kube-proxy啟用IPVS

由于IPVS的優勢,所以盡可能的采用IPVS作為kube-proxy的作業模式,通過以下步驟在創建集群時啟用IPVS

  1. 安裝依賴工具包

    apt install -y ipvsadm ipset
    
    
    • ipset是IPVS作業時會用刀的工具包
    • ipvsadm 是一個客戶端工具,可以讓我們和ipvs表的資料進行互動
  2. kube-proxy啟用IPVS時依賴模塊:

    ip_vs
    ip_vs_rr
    ip_vs_wrr
    ip_vs_sh
    nf_conntrack
    
    

    可通過如下命令檢查系統是否啟用了這些模塊

    $ lsmod | grep -e ip_vs -e nf_conntrack
    
    

    如果沒有啟用,通過如下命令啟用

    $ modprobe -- ip_vs
    $ modprobe -- ip_vs_rr
    $ modprobe -- ip_vs_wrr
    $ modprobe -- ip_vs_sh
    $ modprobe -- nf_conntrack
    
    
  3. kube-proxy組態檔中追加IPVS相關配置

    proxy-mode: "ipvs"
    ipvs-min-sync-period: ipvs 規則重繪的最小時間間隔
    ipvs-scheduler: ipvs的負載演算法(rr、lc等)
    ipvs-sync-period:  ipvs規則重繪的最大時間間隔(30s)
    
    

采用用IPVS模式時,在啟動kube-proxy前必須要確保IPVS模塊在服務上存在,如果kube-proxy啟動時,經過驗證發現IPVS模塊不可用,kube-proxy自動采用iptables模式作業,參考代碼:server_others.go

在介紹kube-proxy如何使用IPVS實作對service的請求前,先看下IPVS的簡單介紹及作業原理

IPVS

  1. 介紹
    IPVS是Linux服務器中用來實作LVS(Linux virtual service)的一個模塊,作業在內核空間是一種基于虛擬IP的負載均衡技術,通過用戶空間的ipvsadm來執行規則制定,常見術語

    解釋
    Real Server 后端請求處理服務器
    P Client IP,客戶端IP
    P Director Virtual IP,負載均衡器虛擬IP
    P Director IP,負載均衡器IP
    P Real Server IP,后端處理請求的真實服務器IP
  2. 作業原理

    1. 因為IPVS是hook到netfilter的input鏈中執行的,所以需要先了解下資料在netfilter中的流轉程序

      正常流程:

      • 資料進入內核空間,到達PreRouting
      • 進行路由決策
      • 請求是發往本機的進入input
      • 進入用戶空間處理
      • 處理完進入output
      • 進入postrouting
      • 發送出去
      • 請求不是本機的,進入forward
      • 進入postrouting
      • 發送出去
    2. 加入IPVS后的簡化邏輯圖

      • 請求到達負載均衡器的內核空間時,到達PREROUTING鏈
      • 當內核根據路由決策發現地址是本機時,將資料包送往INPUT鏈
      • 資料包到達INPUT鏈時,首先會被IPVS檢查,如果請求的目的地址、埠資訊不在自己的hash表中時,資料正常發往用戶空間處理
      • 如果hash表中的規則匹配到請求記錄,依據IPVS的作業模式,對請求頭中的資訊進行修改,之后直接交由POSTROUTING鏈執行
      • POSTROUTING根據IPVS修改后的請求頭資訊(此時目的地址是真實的服務地址),通過路由表,用正確的設備將請求轉發出去

      可以看到,當IPVS模塊作業后,在input鏈上會再次對請求做匹配,匹配到的直接做postrouting,不再進入用戶空間處理,而是把請求發送到IPVS選中的提供真實服務的服務器

    3. IPVS有三種作業模式NAT(Masq)、DR、TUN,因為kube-proxy采用的是NAT模式,所以下面只對NAT模式進行分析

      NAT:Network Address Transition(網路地址轉換),作業在此模式下的IPVS,首先根據scheduler策略選擇一個真實的后端服務,接著將請求頭中的目的地址IP、埠轉換成真實服務的IP和埠,之后進入POSTROUTING,向真實的服務器發起請求,當回應資料回傳時,再通過masqreade,將回傳資料的源地址修改成虛擬服務器的地址,具有有如下特性:

      • Real Server應該使用私有ip地址,和client IP不在一個網段中(如果在一個網段中,real Server可以將資料直接回傳客戶端,不會再經過Director Server回傳)

      • 一般Real Server的網關應該指向DIP,不然的話無法保證回應報文經過Director Server(IP 協議,資料發送給不在同一個網段的服務器時,會把資料發送給網關)

      • RIP要和DIP應該在同一網段內

      • 進出的報文,無論請求還是回應都要經過Directory server(滿足上面三點,這個是自然而然的)

      • 支持埠映射

      • Real Server可以使用任意系統,只要埠對應即可

      其流程如下:

      • 當用戶請求到達DirectorServer,此時請求的資料報文會先到內核空間的PREROUTING鏈, 此時報文的源IP為CIP,目標IP為VIP ,

      • PREROUTING檢查發現資料包的目標IP是本機,將資料包送至INPUT鏈,

      • IPVS比對資料包請求的服務是否為集群服務,若是,修改資料包的目標IP地址為后端服務器IP,然后將資料包發至POSTROUTING鏈, 此時報文的源IP為CIP,目標IP為RIP ,在這個程序完成了目標IP的轉換,

      • POSTROUTING鏈通過選路,將資料包發送給Real Server,

      • Real Server比對發現目標為自己的IP,開始構建回應報文, 此時報文的源IP為RIP,目標IP為CIP ,

      • 因為Real Server的網關指向DIP,并且通常情況下CIP和RIP不在同一個網段內,在這種情況下,Real Server會先將資料發送給Director Server(網關),這樣資料就可以沿原路回傳,

      • Director Server在回應客戶端前,此時會將源IP地址修改為自己的VIP地址,然后回應給客戶端, 此時報文的源IP為VIP,目標IP為CIP,

      • 在此程序中CIP一直是不發生變化的

kube-proxy如何使用IPVS

  1. 從IPVS的作業原理上可以知道,kube-proxy想使用IPVS,需要完成以下幾個作業

    • 需要路由決策判斷要訪問的service的VIP屬于本機,否則,資料不經過input,直接forward出去,IPVS就沒有機會作業了
    • iptables中的規則需要允許對service請求通過,否則資料被過濾掉也不會經過IPVS
    • IPVS要能夠判斷出訪問的service服務是屬于集群服務
    • IPVS要能夠根據service服務對應的VIP,找到真實的服務,之后修改請求頭,向真實的服務發送請求
    • 由于在kubernetes下作業的IPVS,不一定滿足經典的NAT模式的特性,所以資料回傳路徑不一定和請求路徑一致,會出現Real Server直接回傳資料給客戶端的情況
  2. 為了讓node節點識別對應的VIP,kube-proxy啟動時創建了一個虛擬網路設備kube-ipvs0,型別是dummy,并把service的VIP都設定到這個設備下面,創建這個設備,以及向設備中追加VIP的邏輯都在代碼proxier.go中

    $ ip addr 
    
    27: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
    link/ether ba:6b:cb:b9:61:89 brd ff:ff:ff:ff:ff:ff
    inet 10.254.0.1/32 brd 10.254.0.1 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 10.254.0.2/32 brd 10.254.0.2 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 10.254.199.160/32 brd 10.254.199.160 scope global kube-ipvs0
       valid_lft forever preferred_lft forever 
       
    

    對應的service

    $ kubectl get svc -A
    NAMESPACE     NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
    default       clientip     ClusterIP   10.254.199.160   <none>        8080/TCP                 23h
    default       kubernetes   ClusterIP   10.254.0.1       <none>        443/TCP                  25d
    kube-system   kube-dns     ClusterIP   10.254.0.2       <none>        53/UDP,53/TCP,9153/TCP   23d
    kube-system   kubelet      ClusterIP   None             <none>        10250/TCP                18d
    
    

    可以看到所有的VIP都在kube-ipvs0這個設備下面

  3. 為了讓iptables中的規則允許對Servcie的請求通過,kube-proxy在iptables中追加了如下幾條主要規則(iptables.masqueradeAll=false;clusterCIDR=172.30.0.0/16,clusterCIDR就是集群中的pod能分配的IP地址段):

    1. NAT表中:

      $ iptables -t nat -nL
      
      Chain PREROUTING (policy ACCEPT)
      target     prot opt source               destination
      KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */
      
      Chain OUTPUT (policy ACCEPT)
      target     prot opt source               destination
      KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */
      
      Chain POSTROUTING (policy ACCEPT)
      target     prot opt source               destination
      KUBE-POSTROUTING  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes postrouting rules */
      
      Chain KUBE-MARK-MASQ (3 references)
      target     prot opt source               destination
      MARK       all  --  0.0.0.0/0            0.0.0.0/0            MARK or 0x4000
      
      Chain KUBE-POSTROUTING (1 references)
      target     prot opt source               destination
      MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service traffic requiring SNAT */ mark match 0x4000/0x4000
      MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0            match-set KUBE-LOOP-BACK dst,dst,src
      
      Chain KUBE-SERVICES (2 references)
      target     prot opt source               destination
      KUBE-MARK-MASQ  all  -- !172.30.0.0/16       0.0.0.0/0            match-set KUBE-CLUSTER-IP dst,dst
      ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            match-set KUBE-CLUSTER-IP dst,dst
      
      

      有兩點需要解釋下

      1. 關于規則

        KUBE-MARK-MASQ  all  -- !172.30.0.0/16       0.0.0.0/0            match-set KUBE-CLUSTER-IP dst,dst
        
        

        意思是對于非集群內的pod訪問集群的cluster IP時會執行masquerade,這是因為在kube-proxy的啟動條件設定成了iptables.masqueradeAll=false;clusterCIDR=172.30.0.0/16才這樣

        如果設定成iptables.masqueradeAll=false;clusterCIDR=,即不設定CIDR規則會變成

        KUBE-MARK-MASQ  all  --  0.0.0.0/0            0.0.0.0/0           match-set KUBE-CLUSTER-IP src,dst
        
        

        效果應該是對自己訪問自己的請求做masquerade,其他請求都不做

        如果iptables.masqueradeAll=true,規則變成

        KUBE-MARK-MASQ  all  --  0.0.0.0/0            0.0.0.0/0            match-set KUBE-CLUSTER-IP dst,dst
        
        

        效果對所有請求都做masquerade

      2. 關于匹配語法 -m set --match-set ,,, 代表用set模塊的對請求進行匹配

        語法如下:

         -m set --match-set name flags
         
        

        具體傳入的flags要依據 name指定的set的型別來傳入,具體ipset的用法可通過如下命令查看

        ipset --help
        
        

        這里以KUBE-CLUSTER-IP為例

        
        $ ipset --list KUBE-CLUSTER-IP
        Name: KUBE-CLUSTER-IP
        Type: hash:ip,port
        Revision: 5
        Header: family inet hashsize 1024 maxelem 65536
        Size in memory: 408
        References: 2
        Number of entries: 5
        Members:
        10.254.0.2,udp:53
        10.254.0.1,tcp:443
        10.254.0.2,tcp:9153
        10.254.199.160,tcp:8080
        10.254.0.2,tcp:53
        
        
        • 對應的型別資訊:Type: hash:ip,port

        • 結合前面的規則

          ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            match-set KUBE-CLUSTER-IP dst,dst 
          
          

          表述的意思是請求的目的地址IP、目的埠和KUBE-CLUSTER-IP中的Members有匹配時,就接收請求

    2. filter表中

      $ iptables -nL -t filter
      Chain FORWARD (policy ACCEPT)
      target     prot opt source               destination
      KUBE-FORWARD  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes forwarding rules */
      	
      Chain OUTPUT (policy ACCEPT)
      target     prot opt source               destination
      KUBE-FIREWALL  all  --  0.0.0.0/0            0.0.0.0/0
      
      Chain KUBE-FIREWALL (2 references)
      target     prot opt source               destination
      DROP       all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes firewall for dropping marked packets */ mark match 0x8000/0x8000
      
      Chain KUBE-FORWARD (1 references)
      target     prot opt source               destination
      ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes forwarding rules */ mark match 0x4000/0x4000
      ACCEPT     all  --  172.30.0.0/16        0.0.0.0/0            /* kubernetes forwarding conntrack pod source rule */ ctstate RELATED,ESTABLISHED
      ACCEPT     all  --  0.0.0.0/0            172.30.0.0/16        /* kubernetes forwarding conntrack pod destination rule */ ctstate RELATED,ESTABLISHED
      
      

    通過分析kube-proxy追加的這些規則,可以看到訪問service提供的服務時,iptables中的規則最終都會允許請求通過,并且通過 -m set --match-set 的規則匹配機制,kube-proxy不用隨著servcie的創建和銷毀來修改iptables中的規則,只用修改對應的ipset中相應的Members就能夠達到效果,保證iptables的規則表固定大小,實作大規模服務集群中保持性能的穩定

  4. 請求通過了iptables中的規則后,在INPUT階段,需要IPVS來對請求進行判斷,看請求的服務是否屬于集群服務,是的話還要能找出正確的真實服務地址,這個kube-proxy如何實作呢

    kube-proxy通過監聽API server,當有service創建時,通過呼叫系統的netlink 介面,將service和對應的endpoint插入到IPVS對應的hash表中,對應代碼在proxier.go中,用戶可以通過ipvsadm工具查看ipvs hash表中的資料

    $ ipvsadm --list
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  promote.cache-dns.local:http rr
      -> master:6443                  Masq    1      1          0
    TCP  promote.cache-dns.local:doma rr
      -> 172.30.78.2:domain           Masq    1      0          0
    TCP  promote.cache-dns.local:9153 rr
      -> 172.30.78.2:9153             Masq    1      0          0
    TCP  promote.cache-dns.local:http rr
      -> 172.30.22.4:http-alt         Masq    1      0          0
      -> 172.30.78.4:http-alt         Masq    1      0          0
    UDP  promote.cache-dns.local:doma rr
      -> 172.30.78.2:domain           Masq    1      0          0   
      
    

    因為啟用了DNS的cache功能,所以這個地方看到的service資訊是DNS快取資訊

通過上述幾個步驟后,kube-proxy就把需要使用IPVS的依賴條件都實作,就可以在請求到來時利用IPVS機制對請求進行轉發了,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/38922.html

標籤:其他

上一篇:搭建websocket訊息推送服務,必須要考慮的幾個問題

下一篇:kubernetes(十九) 網路

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more