主頁 >  其他 > UIAutomator2的使用教程

UIAutomator2的使用教程

2021-12-18 08:08:54 其他

文章目錄

  • 一、簡介
  • 二、支持平臺及語言
  • 三、作業原理
  • 四、安裝
    • 4.1 環境要求
    • 4.2 安裝adb
    • 4.3 安裝uiautomator2
    • 4.4 設備安裝atx-agent
    • 4.5 安裝weditor
    • 4.6 應用及操作
      • 4.6.1 呼叫uiautomator2的程序
      • 4.6.2 設備連接方法
      • 4.6.3 檢查并維持設備端守護行程處于運行狀態
      • 4.6.4 打開除錯開關
      • 4.6.5 安裝應用
      • 4.6.6 啟動應用
      • 4.6.7 停止應用
      • 4.6.8 停止所有正在運行的應用程式
      • 4.6.9 跳過彈窗,禁止彈窗
      • 4.6.10 Session
      • 4.6.11 獲取設備資訊
      • 4.6.12 獲取應用資訊
      • 4.6.13 推拉檔案
      • 4.6.14 關鍵事件
      • 4.6.15 手勢與設備的互動
      • 4.6.16 螢屏相關的
      • 4.6.17 選擇Ui物件
      • 4.6.18 UI物件的六種定位方式
      • 4.6.19 Toast
      • 4.6.20 XPath
  • 五、Google uiautomator與uiautomator2的區別

一、簡介

??uiautomator2是一個python庫,用于Android的UI自動化測驗,其底層基于Google uiautomator,Google提供的uiautomator庫可以獲取螢屏上任意一個APP的任意一個控制元件屬性,并對其進行任意操作,
GitHub地址:https://github.com/openatx/uiautomator2

二、支持平臺及語言

??python-uiautomator2封裝了谷歌自帶的uiautomator2測驗框架,提供便利的python介面,他允許測驗人員直接在PC上撰寫Python的測驗代碼,操作手機應用,完成自動化,大大提高了自動化代碼撰寫的效率,

三、作業原理

在這里插入圖片描述
如圖所示,python-uiautomator2主要分為兩個部分,python客戶端,移動設備

  • python端:運行腳本,并向移動設備發送HTTP請求
  • 移動設備:移動設備上運行了封裝了uiautomator2的HTTP服務,決議收到的請求,并轉化成uiautomator2的代碼,

整個程序

  1. 在移動設備上安裝atx-agent(守護行程),隨后atx-agent啟動uiautomator2服務(默認7912埠)進行監聽
  2. 在PC上撰寫測驗腳本并執行(相當于發送HTTP請求到移動設備的server端)
  3. 移動設備通過WIFI或USB接收到PC上發來的HTTP請求,執行制定的操作

四、安裝

4.1 環境要求

  • python 3.6+
  • android 4.4+

4.2 安裝adb

??如命令列可以執行adb devices,則跳過此步驟
??從谷歌官網下載Android Platform Tools, 解壓,并加包含adb.exe的目錄加入到系統的PATH中,

4.3 安裝uiautomator2

pip install --pre uiautomator2 
pip install pillow (如果需要截圖,可安裝pillow)

4.4 設備安裝atx-agent

首先設備連接到PC,并能夠adb devices發現該設備,
執行下面的命令會自動安裝本庫所需要的設備端程式:uiautomator-server,atx-agent,openstf / minicap,openstf / minitouch

# init就是所有USB連接電腦的手機上都安裝uiautomator2
python -m uiautomator2 init
 
# 指定手機安裝uiautomator2, 用 --mirror
python -m uiautomator2 init --mirror --serial $SERIAL

# 嫌棄慢的話,可以用國內的鏡像
python -m uiautomator2 init --mirror

最后提示success,代表atx-agent初始化成功,

4.5 安裝weditor

有了這個,方便我們快速的識別手機上的元素,方便寫代碼

pip install -U weditor   #pip install --pre weditor

安裝好之后,就可以在命令列運行 weditor --help 確認是否安裝成功了,

Windows系統可以使用命令在桌面創建一個快捷方式:

python -m weditor –shortcut
# 或weditor --shortcut

在windows cmd中執行上述命令后,會在桌面上創建一個快捷方式,如下圖:
在這里插入圖片描述
啟動方法:

  • 方法1:命令列直接輸入 weditor 會自動打開瀏覽器,輸入設備的ip或者序列號,點擊Connect即可
  • 方法2:桌面上雙擊WEditor快捷方式即可
  • 方法3:命令列中執行 python -m weditor

啟動后瀏覽器會自動打開一個網頁,如下圖:
在這里插入圖片描述
重點說下這個部分
在這里插入圖片描述
??如何與手機連接起來呢?就是通過手機序列號或IP來實作的,打開cmd,輸入adb devices,查看手機序列號,輸入框中填寫設備的IP或者設備的Serial(序列號),之后點擊Connect,如果一切正常就會出現一個綠色的葉子
在這里插入圖片描述
??點擊藍色的Reload,就可以在網頁上看到手機的界面了,非常的強大,我們可以看到手機元素的各種定位方法,在UI自動化寫代碼的時候,真的是非常的方面,手機頁面和weditor是實時同步的,

【推薦】AppetizerIO 所見即所得腳本編輯器
AppetizerIO 提供了對uiautomator2的深度集成,可以圖形化管理ATX設備,還有所見即所得腳本編輯器

  • 到網站下載直接打開,首次使用需要注冊賬號
  • 設備管理 界面里可以檢查設備是否正常init,起停atx-agent,抓取atx-agent.log檔案
  • APP測驗->腳本助手調出腳本助手,實時界面同步,點擊界面直接插入各種代碼,同時支持uiautomator和Appium

4.6 應用及操作

4.6.1 呼叫uiautomator2的程序

  1. 配置手機設備引數,設定具體操作的是哪一臺手機
  2. 抓取手機上應用的控制元件,制定對應的控制元件來進行操作
  3. 對抓取到的控制元件進行操作,比如點擊、填寫引數等

4.6.2 設備連接方法

??python-uiautomator2連接手機的方式有兩種,一種是通過WIFI,另外一種是通過USB,兩種方法各有優缺點,
??WIFI最便利的地方就是可以不用連接資料線,USB則可以用在PC和手機網路不在一個網段用不了的情況,

(1)通過WiFi,假設設備IP 192.168.0.1和您的PC在同一網路中

import uiautomator2 as u2
d = u2.connect('192.168.0.1') # WIFI鏈接設備,或者u2.connect_wifi('10.0.0.1')

(2)通過USB, 假設設備序列是123456789F(見adb devices)

import uiautomator2 as u2
d = u2.connect('123456789F') # USB鏈接設備,或者u2.connect_usb('123456f')
#d = u2.connect_usb()  #當前只有一個設備時可以用這個

??在沒有引數的情況下呼叫u2.connect(), uiautomator2將從環境變數ANDROID_DEVICE_IP獲取設備IP,如果這個環境變數是空的,uiautomator將回傳connect_usb,您需要確保只有一個設備連接到計算機,

4.6.3 檢查并維持設備端守護行程處于運行狀態

d.healthcheck()

4.6.4 打開除錯開關

d.debug = True
d.info
'''
回傳
12:32:47.182 $ curl -X POST -d '{"jsonrpc": "2.0", "id": "b80d3a488580be1f3e9cb3e926175310", "method": "deviceInfo", "params": {}}' 'http://127.0.0.1:54179/jsonrpc/0'
12:32:47.225 Response >>>
{"jsonrpc":"2.0","id":"b80d3a488580be1f3e9cb3e926175310","result":{"currentPackageName":"com.android.mms","displayHeight":1920,"displayRotation":0,"displaySizeDpX":360,"displaySizeDpY":640,"displayWidth":1080,"productName"
:"odin","screenOn":true,"sdkInt":25,"naturalOrientation":true}}
'''

4.6.5 安裝應用

只能從URL安裝

d.app_install('http://some-domain.com/some.apk') #引號內為下載apk地址

4.6.6 啟動應用

d.app_start('包名', '界面名')

4.6.7 停止應用

#相當于'am force-stop'強制停止應用
d.app_stop('com.example.hello_world')  #引號內為包名稱
#相當于'pm clear' 清空App資料
d.app_clear('com.example.hello_world')

4.6.8 停止所有正在運行的應用程式

# 停止所有
d.app_stop_all()
# 停止所有應用程式,除了com.examples.demo
d.app_stop_all(excludes=['com.examples.demo'])

4.6.9 跳過彈窗,禁止彈窗

d.disable_popups() #自動跳過彈出視窗 
d.disable_popups(False) #禁用自動跳過彈出視窗

4.6.10 Session

Session表示應用程式的生命周期,可用于啟動應用,檢測應用崩潰

  • 啟動和關閉應用程式
sess = d.session("com.netease.cloudmusic") # start 網易云音樂
sess.close()  # 停止網易云音樂
  • 使用python with啟動和關閉應用程式
with d.session("com.netease.cloudmusic") as sess:
    sess(text="Play").click()
  • 鏈接正在運行的應用
sess = d.session("com.netease.cloudmusic",attach = True
  • 檢測應用崩潰
# App正在運行時
sess(text="Music").click() # 操作是正常的
 
# App崩潰時
sess(text="Music").click() # 引發會話中斷錯誤SessionBrokenError
# session下的其他函式呼叫也會引發SessionBrokenError錯誤

# 檢查會話是否正確,
# 警告:函式名將來可能會更改
sess.running() # True or False

4.6.11 獲取設備資訊

  • 獲取基本資訊
d.info

# 以下是可能輸出結果:
{ 
    u'displayRotation': 0,
    u'displaySizeDpY': 640,
    u'displaySizeDpX': 360,
    u'currentPackageName': u'com.android.launcher',
    u'productName': u'takju',
    u'displayWidth': 720,
    u'sdkInt': 18,
    u'displayHeight': 1184,
    u'naturalOrientation': True
}
  • 獲取視窗大小
d.window_size()
# 設備垂直輸出示例: (1080, 1920)
# 設備水平輸出示例: (1920, 1080)
  • 獲取當前應用程式資訊,對于某些android設備,輸出可以為空(參見輸出示例3)
d.current_app()
# 輸出示例 1: {'package': 'com.netease.example', 'activity': '.Client', 'pid': 23710}
# 輸出示例 2: {'package': 'com.ruguoapp.jike', 'activity': 'com.ruguoapp.jike.business.video.ui.activity.videolist.VideoListActivity'}
# 輸出示例 3: {'package': None, 'activity': None}
  • 獲取設備序列號
d.serial
# 輸出示例: 74aAEDR428Z9
  • 獲取WIFI IP
print(d.wlan_ip)
#輸出示例:10.0.0.1
  • 獲取詳細的設備資訊
print(d.device_info)

# 輸出示例:
{'udid': '3578298f-b4:0b:44:e6:1f:90-OD103',
 'version': '7.1.1',
 'serial': '3578298f',
 'brand': 'SMARTISAN',
 'model': 'OD103',
 'hwaddr': 'b4:0b:44:e6:1f:90',
 'port': 7912,
 'sdk': 25,
 'agentVersion': 'dev',
 'display': {'width': 1080, 'height': 1920},
 'battery': {'acPowered': False,
  'usbPowered': False,
  'wirelessPowered': False,
  'status': 3,
  'health': 0,
  'present': True,
  'level': 99,
  'scale': 100,
  'voltage': 4316,
  'temperature': 272,
  'technology': 'Li-ion'},
 'memory': {'total': 3690280, 'around': '4 GB'},
 'cpu': {'cores': 8, 'hardware': 'Qualcomm Technologies, Inc MSM8953Pro'},
 'presenceChangedAt': '0001-01-01T00:00:00Z',
 'usingBeganAt': '0001-01-01T00:00:00Z'}

4.6.12 獲取應用資訊

d.app_info("com.examples.demo")
# 會輸出
#{
#    "mainActivity": "com.github.uiautomator.MainActivity",
#    "label": "ATX",
#    "versionName": "1.1.7",
#    "versionCode": 1001007,
#    "size":1760809
#}
# 保存應用程式圖示
img = d.app_icon("com.examples.demo")
img.save("icon.png")

4.6.13 推拉檔案

  • 將檔案推送到設備
# push檔案夾
d.push("foo.txt", "/sdcard/")
# push和重命名
d.push("foo.txt", "/sdcard/bar.txt")
# push fileobj
with open("foo.txt", 'rb') as f:
    d.push(f, "/sdcard/")
# 推動和更改檔案訪問模式
d.push("foo.sh", "/data/local/tmp/", mode=0o755)
  • 從設備中拉出一個檔案
d.pull("/sdcard/tmp.txt", "tmp.txt")

# 如果在設備上找不到檔案,FileNotFoundError將引發
d.pull("/sdcard/some-file-not-exists.txt", "tmp.txt")

4.6.14 關鍵事件

  • 打開/關閉螢屏
d.screen_on() #打開螢屏 
d.screen_off() #關閉螢屏
  • 獲取當前螢屏狀態
d.info.get(' screenOn ') #需要 Android >= 4.4
  • 硬鍵盤和軟鍵盤操作
d.press("home") # 點擊home鍵
d.press("back") # 點擊back鍵
d.press("left") # 點擊左鍵
d.press("right") # 點擊右鍵
d.press("up") # 點擊上鍵
d.press("down") # 點擊下鍵
d.press("center") # 點擊選中
d.press("menu") # 點擊menu按鍵
d.press("search") # 點擊搜索按鍵
d.press("enter") # 點擊enter鍵
d.press("delete") # 點擊洗掉按鍵
d.press("recent") # 點擊近期活動按鍵
d.press("volume_up") # 音量+
d.press("volume_down") # 音量-
d.press("volume_mute") # 靜音
d.press("camera") # 相機
d.press("power") #電源鍵
  • 解鎖螢屏
d.unlock()
# 相當于
# 1. 發射活動:com.github.uiautomator.ACTION_IDENTIFY
# 2. 按home鍵

4.6.15 手勢與設備的互動

# 1、單擊螢屏
d.click(x,y)  # x,y為點擊坐標

# 2、雙擊螢屏
d.double_click(x,y)
d.double_click(x,y,0.1) # 默認兩個單擊之間間隔時間為0.1秒

# 3、長按
d.long_click(x,y)
d.long_click(x,y,0.5)  # 長按0.5秒(默認)

# 4、滑動
d.swipe(sx, sy, ex, ey)
d.swipe(sx, sy, ex, ey, 0.5) #滑動0.5s(default)

# 5、拖動
d.drag(sx, sy, ex, ey)
d.drag(sx, sy, ex, ey, 0.5)#拖動0.5s(default)

# 6、滑動點 多用于九宮格解鎖,提前獲取到每個點的相對坐標(這里支持百分比)
# 從點(x0, y0)滑到點(x1, y1)再滑到點(x2, y2)
# 兩點之間的滑動速度是0.2秒
d.swipe((x0, y0), (x1, y1), (x2, y2), 0.2)

# 注意:單擊,滑動,拖動操作支持百分比位置值,例:
d.long_click(0.5, 0.5) # 表示長按螢屏中心

4.6.16 螢屏相關的

# 1、檢索方向
d.orientation
# 檢索方向,輸出可以是 "natural" or "left" or "right" or "upsidedown"

# 2、設定方向
d.set_orientation('l') # or "left"
d.set_orientation("l") # or "left"
d.set_orientation("r") # or "right"
d.set_orientation("n") # or "natural"

# 3、凍結/開啟旋轉
d.freeze_rotation()# 凍結旋轉
d.freeze_rotation(False)# 開啟旋轉

# 4、轉儲UI層次結構
# get the UI hierarchy dump content (unicoded).(獲取UI層次結構轉儲內容)
d.dump_hierarchy()

# 5、打開通知或快速設定
d.open_notification()#下拉打開通知欄
d.open_quick_settings()#下拉打開快速設定欄
  • 截圖
# 截圖并保存到電腦上的一個檔案中,需要Android>=4.2,
d.screenshot("home.jpg")
 
# 得到PIL.Image格式的影像. 但你必須先安裝pillow
image = d.screenshot() # default format="pillow"
image.save("home.jpg") # 或'home.png',目前只支持png 和 jpg格式的影像
 
# 得到OpenCV的格式影像,當然,你需要numpy和cv2安裝第一個
import cv2
image = d.screenshot(format='opencv')
cv2.imwrite('home.jpg', image)
 
# 獲取原始JPEG資料
imagebin = d.screenshot(format='raw')
open("some.jpg", "wb").write(imagebin)

4.6.17 選擇Ui物件

選擇器是一種方便的機制,用于在當前視窗中標識特定的UI物件,

#選擇帶有文本'Clock'的物件,它的類名是'android.widget.TextView'
d(text='Clock', className='android.widget.TextView')

選擇器支持以下引數,有關詳細資訊,請參閱 UiSelector Java doc for detailed information

  • text, textContains, textMatches, textStartsWith
  • className, classNameMatches
  • description, descriptionContains, descriptionMatches, descriptionStartsWith
  • checkable, checked, clickable, longClickable
  • scrollable, enabled,focusable, focused, selected
  • packageName, packageNameMatches
  • resourceId, resourceIdMatches
  • index, instance
# 1、檢查特定的UI物件是否存在
d(text="Settings").exists # 回傳布林值,如果存在則為True,否則為False
d.exists(text="Settings") # 另一種寫法
# 高級用法
d(text="Settings").exists(timeout=3) # 等待'Settings'在3秒鐘出現

# 2、獲取特定UI物件的資訊
d(text="Settings").info

# 3、獲取/設定/清除可編輯欄位的文本(例如EditText小部件)
d(text="Settings").get_text()  #得到文本小部件
d(text="Settings").set_text("My text...")  #設定文本
d(text="Settings").clear_text()  #清除文本

# 獲取Widget中心點
d(text="Settings").center()
#d(text="Settings").center(offset=(0, 0)) # 基準位置左前

4.6.18 UI物件的六種定位方式

UI物件有六種定位方式,text、resourceId、description、className、xpath、坐標

  • 執行單擊UI物件
# 1、text定位單擊
d(text="Settings").click()
d(text="Settings", className="android.widget.TextView").click()

# 2、resourceId定位單擊
d(resourceId="com.ruguoapp.jike:id/tv_title", className="android.widget.TextView").click() 

# 3、description定位單擊
d(description="設定").click()
d(description="設定", className="android.widget.TextView").click()

# 4、className定位單擊
d(className="android.widget.TextView").click()

# 5、xpath定位單擊
d.xpath("//android.widget.FrameLayout[@index='0']/android.widget.LinearLayout[@index='0']").click()

# 6、坐標單擊
d.click(182, 1264)


# 等待元素出現(最多10秒),出現后單擊 
d(text="Settings").click(timeout=10)
# 在10秒時點擊,默認的超時0
d(text='Skip').click_exists(timeout=10.0)
# 單擊直到元素消失,回傳布爾
d(text="Skip").click_gone(maxretry=10, interval=1.0) # maxretry默認值10,interval默認值1.0
# 點擊基準位置偏移
d(text="Settings").click(offset=(0.5, 0.5)) # 點擊中心位置,同d(text="Settings").click()
d(text="Settings").click(offset=(0, 0)) # 點擊左前位置
d(text="Settings").click(offset=(1, 1)) # 點擊右下
  • 執行雙擊UI物件
d(text="設定").double_click() #雙擊特定ui物件的中心
d.double_click(x, y, 0.1)#兩次單擊之間的默認持續時間為0.1秒
  • 執行長按UI物件
# 長按特定UI物件的中心
d(text="Settings").long_click()
d.long_click(x, y, 0.5) # 長按坐標位置0.5s默認
  • 將UI物件拖向另一個點或另一個UI物件
# Android<4.3不能使用drag.
# 在0.5秒內將UI物件拖到螢屏點(x, y)
d(text="Settings").drag_to(x, y, duration=0.5)
# 將UI物件拖到另一個UI物件的中心位置,時間為0.25秒
d(text="Settings").drag_to(text="Clock", duration=0.25)
  • 特定UI物件的手勢操作
    支持兩種手勢:從邊緣到中心、從中心到邊緣
#注意:縮放要到安卓4.3才能設定,
#從邊緣到中心
d(text="Settings").pinch_in(percent=100, steps=10)
# 從中心到邊緣
d(text="Settings").pinch_out()
  • 等待,直到特定的UI出現或消失
# 等待ui物件出現
d(text="Settings").wait(timeout=3.0) # 回傳布林值
# 等待ui物件的消失
d(text="Settings").wait_gone(timeout=1.0)
# 默認超時為20秒,有關詳細資訊,請參閱全域設定

4.6.19 Toast

  • 展示Toast
d.toast.show("Hello world")
d.toast.show("Hello world", 1.0) # 顯示為1.0,默認為1.0
  • 獲取 Toast
# [引數]
# 5.0: 最大等待超時,默認的10.0
# 快取時間10.0s,如果最近10s已經出現toast,則回傳快取toast,默認10.0(將來可能會有變化)
# 如果最終沒有toast,回傳"default message",默認沒有
d.toast.get_message(5.0, 10.0, "default message")

# 常見的使用
assert "Short message" in d.toast.get_message(5.0, default="")

#清楚快取toast
d.toast.reset()
# Now d.toast.get_message(0) is None

4.6.20 XPath

例如: 其中一個節點的內容

<android.widget.TextView
  index="2"
  text="05:19"
  resource-id="com.netease.cloudmusic:id/qf"
  package="com.netease.cloudmusic"
  content-desc=""
  checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false"
  scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true"
  bounds="[957,1602][1020,1636]" />

xpath定位和使用時,有些屬性的名字有修改需要注意

description -> content-desc
resourceId -> resource-id

常見用法:

# 等待10s
d.xpath("//android.widget.TextView").wait(10.0)
# 找到并單擊
d.xpath("//*[@content-desc='分享']").click()
# 檢查是否存在
if d.xpath("//android.widget.TextView[contains(@text, 'Se')]").exists:
    print("exists")
# 獲取所有文本視圖文本、屬性和中心點
for elem in d.xpath("//android.widget.TextView").all():
    print("Text:", elem.text)
#獲取視圖文本
for elem in d.xpath("//android.widget.TextView").all():
    print("Attrib:", elem.attrib)
# 獲取屬性和中心點
# 回傳: (100, 200)
for elem in d.xpath("//android.widget.TextView").all():
    print("Position:", elem.center())

# 所有元素
//*

# resource-id包含login字符
//*[contains(@resource-id, 'login')]

# 按鈕包含賬號或帳號
//android.widget.Button[contains(@text, '賬號') or contains(@text, '帳號')]

# 所有ImageView中的第二個
(//android.widget.ImageView)[2]

# 所有ImageView中的最后一個
(//android.widget.ImageView)[last()]

# className包含ImageView
//*[contains(name(), "ImageView")]

五、Google uiautomator與uiautomator2的區別

  1. API相似但是不完全兼容
  2. uiautomator2是安卓專案,而uiautomator是Java專案
  3. uiautomator2可以輸入中文,而uiautomator的Java工程需借助utf7輸入法才能輸入中文
  4. uiautomator2必須明確EditText框才能向里面輸入文字,uiautomator直接指定父類也可以在子類中輸入文字
  5. uiautomator2獲取控制元件速度比uiautomator快

文章參考:https://vic.kim/2019/05/20/UIAutomator2%E7%9A%84%E4%BD%BF%E7%94%A8/

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

標籤:其他

上一篇:tomcat成功啟動,但找不到index.jsp/index.html

下一篇:基于javaweb+jsp的電影院資訊管理系統

標籤雲
其他(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