Wireshark Git repository
Wireshark Git存儲庫
Git用于跟蹤對Wireshark源代碼所做的更改。該代碼存儲在Wireshark項目的Git存儲庫中,該存儲庫位于wirehark.org域的服務器上。
使用Gerrit代碼檢查系統管理對官方存儲庫的更改 。Gerrit使在將更改推送到主存儲庫之前進行測試和討論變得容易。
*為什么選擇Git? * Git是一種快速,靈活的管理源代碼的方式。它允許大規模分布式開發并確保數據完整性。
*為什么選擇Gerrit? * Gerrit使貢獻變得容易。您可以使用任何OpenID提供程序登錄并進行更改。它可以從Web和命令行使用,并且與許多流行的工具集成在一起。
使用Wireshark的Git存儲庫,您可以:
- 使您個人資源保持最新
- 官方源代碼更改時獲得郵件通知
- 從任何先前版本獲取源文件
- 使用Web界面快速查看sources
- 查看哪個人更改了一段特定的代碼
Git命名約定
像大多數版本控制系統一樣,Git使用分支來管理源代碼的不同副本并允許并行開發。Wireshark使用以下分支命名約定:
- master:主要功能開發和奇數編號的“development”版本。
- master-xy:穩定的發布維護。例如,master-3.0用于管理3.0.x官方發行版。
主要版本和候選版本的標簽由“ v”和版本號組成,例如“ v3.0.1”或“ v3.0.3rc0”。在主要版本中,還帶有一個帶有“ wireshark-”前綴的標簽,后跟一個版本號,例如“ wireshark-3.0.0”。
通過SSH或HTTPS進行Git
您可以使用Git客戶端從Wireshark的代碼審查系統下載源代碼。可以從匿名git URL進行克隆:
如果創建Gerrit帳戶,則可以從經過身份驗證的URL進行克隆:
- ssh:// your.username@code.wireshark.org :29418 / wireshark
- https:// your.username@code.wireshark.org / review / wireshark
SSH允許您在命令行上使用Gerrit 。HTTP使您可以在阻止Gerrit SSH端口(29418)的環境中訪問存儲庫。我們建議您使用SSH接口。但是,隨著更多工具利用Gerrit的HTTP REST API,情況可能會改變。
- 使用OpenID 登錄到https://code.wireshark.org/review(單擊網頁右上角的注冊或登錄)。按照登錄說明進行操作。
- 在網頁的右上角,點擊您的帳戶名稱,然后選擇設置。
- 在配置文件下設置用戶名。這將是您用于SSH訪問的用戶名。對于以下步驟,我們假設您的用戶名是
henry.perry。 - 選擇“ SSH公鑰”并添加一個或多個密鑰。通常,您將為所使用的每臺計算機上傳密鑰。
- 安裝git-review。這是許多Linux發行版中的可安裝軟件包。您也可以將其作為Python軟件包安裝 。(此步驟并非絕對必要,但使Gerrit的工作變得更加容易。)要從Chocolatey run安裝
\#請先安裝Python 3,然后“restart” shell。
PS$> choco install -y python3
PS$> choco install -y git-review -source python
# Make sure that “git-review” is present in our path (edit the version as needed).
PS$>$userpath = [Environment]::GetEnvironmentVariable(“Path”, [EnvironmentVariableTarget]::User)
PS$>$userpath += “;C:\Python37\Scripts”
PS$>[Environment]::SetEnvironmentVariable(“Path”, $userpath, [EnvironmentVariableTarget]::User)
PS$>RefreshEnv
6.現在進入命令行。首先,請確保git工作正常:
$ git –version
7.如果這是您第一次使用Git,請確保已配置您的用戶名和電子郵件地址。
$ git config –global user.name “Henry Perry”
$ git config –global user.email henry.perry@example.com
8.克隆Wireshark存儲庫:
$ git clone ssh://henry.perry@code.wireshark.org:29418/wireshark\
clone僅需執行一次。這會將所有源(包括目錄)從服務器復制到您的計算機并簽出最新版本。這可能需要一些時間,具體取決于您的Internet連接速度。
9.然后設置git pre-commit hook 和推送地址:
$ cd wireshark
$ cp tools/pre-commit .git/hooks/
$ git config –add remote.origin.push HEAD:refs/for/master
這將對提交運行一些基本檢查,以確保代碼不包含瑣碎的錯誤。它還會警告它是否與tools /目錄中的主副本不同步。更改推送地址是必要的:由于使用了Gerrit,我們有一個不對稱的拉和推過程。
10.初始化git-review。
$ git review -s
這將準備好與Gerrit一起使用的本地存儲庫,包括安裝commit-msg hook腳本。
Git更新
克隆Wireshark的Git存儲庫后,可以通過運行來更新
$ git status
$ git pull
根據您的工作習慣,可以運行git pull --rebase或git checkout -b my-topic-branch origin/master 。
構建Unix
推薦構建Wireshark的方法是使用CMake和Ninja:
$ cd ..
$ mkdir wireshark-ninja
$ cd wireshark-ninja
# Assumes your source directory is named “wireshark”.
$ cmake -G Ninja ../wireshark
$ ninja (or cmake –build .)
如果您需要使用非標準配置進行構建,則可以運行
$ cmake -LH ../wireshark
Unix-like 平臺
成功構建之后,您可以直接從構建目錄運行Wireshark。程序仍然需要知道它是從build目錄而不是從安裝位置運行的。這會影響程序可以在其中找到其他部分和相關數據文件的目錄。
為了從構建目錄運行Wireshark,請設置環境變量WIRESHARK_RUN_FROM_BUILD_DIRECTORY并運行Wireshark。如果平臺安裝正確,則構建目錄和當前工作目錄不在PATH中,因此啟動Wireshark的命令行為:
$ WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1 ./run/wireshark
無需以root用戶身份運行Wireshark,您將無法捕獲。當您選擇以這種方式運行Wireshark時,如果事情無法按預期進行,則您的終端輸出將很有用。
Windows native
在構建期間,所有相關程序文件都收集在一個子目錄中run\RelWithDebInfo。您可以通過啟動Wireshark.exe可執行文件從那里運行該程序。
調試生成的Wireshark
您可以使用命令行調試器(例如gdb,dbx或lldb)進行調試。如果您喜歡圖形調試器,則可以使用IDE或調試前端,例如Qt Creator,CLion或Eclipse。
可以通過設置G_DEBUG環境變量在GLib上設置其他陷阱:
$ G_DEBUG=fatal_criticals gdb wireshark
如果遇到內存安全錯誤,則可能要使用Address Sanitizer進行構建, 以便Wireshark會立即向您發出任何檢測到的問題的警報。
$ cmake .. -G Ninja -DENABLE_ASAN=1
上傳您的更新
當您對更改感到滿意(并獲得組織的必要批準)時,可以將其上傳到https://code.wireshark.org/review進行審核 。這需要一個Gerrit Code Review帳戶,更改應推送到 Gerrit中一個“ refs / fo”分支。例如,要上傳新的Snowcone Machine Protocol dissector,您可以將主題“ snowcone-machine”推送到refs / for / master:
用戶名my.username是在審核系統注冊期間提供的用戶名。
如果已git-review安裝,則可以使用更少的輸入內容上傳更改:
\#注意:“ -f”標志將刪除您當前的分支。
$ git review -f
補丁更改
如果在master分支中修復了錯誤,則可能需要或有必要將修復反向移植到穩定的分支。您可以在Git中通過選擇從一個分支到另一個分支的更改來做到這一點。假設您要將1ab2c3d4更改從master分支反向移植到master-1.10。使用“ pure Git”命令,您將執行以下操作:
# Create a new topic branch for the backport.
$ git checkout -b backport-g1ab2c3d4 origin/master-1.10
# Cherry-pick the change. Include a “cherry picked from…” line.
$ git cherry-pick -x 1ab2c3d4
# If there are conflicts, fix them.
# Compile and test the change.
$ make
$ …
# OPTIONAL: Add entries to docbook/release-notes.adoc.
$ $EDITOR docbook/release-notes.adoc
# If you made any changes, update your commit:
$ git commit –amend -a
# Upload the change to Gerrit
$ git push ssh://my.username@code.wireshark.org:29418/wireshark HEAD:refs/for/master-1.10/backport-g1ab2c3d4
如果要挑選Gerrit更改ID(例如I5e6f7890),可以使用 git review -X I5e6f7890代替git cherry-pick和git review 代替git push。
使用補丁
給定文件new.diff包含統一的diff,調用補丁工具的正確方法取決于new.diff中的路徑名 。如果它們是相對于頂級源目錄的(例如,如果prefs.c的修補程序只是將prefs.c作為文件名),則可以按以下方式運行它:
$ patch -p0 < new.diff
如果它們是相對于更高級別目錄的,則將路徑中更高級別目錄的數目替換為0,例如,如果名稱為 wireshark.orig / prefs.c和 wireshark.mine / prefs.c,您可以使用以下命令運行它:
$ patch -p1 <new.diff
如果它們相對于頂級目錄的子目錄,則可以patch在該目錄中運行并使用來運行它-p0。
如果不運行-pat所有補丁程序,則補丁程序工具將使路徑名變平,因此,如果您的補丁程序文件包含CMakeLists.txt和 wiretap / CMakeLists.txt的補丁程序,它將嘗試將第一個補丁程序應用于頂級 CMakeLists .txt,然后將 wiretap / CMakeLists.txt補丁也應用到頂層 CMakeLists.txt。
補丁程序應在文件系統中的哪個位置調用?
如果路徑名是相對于頂級源目錄或該目錄之上的目錄的,則可以在頂級源目錄中運行它。
如果它們是相對于子目錄的 ?-例如,如果有人對packet-ip.c進行了補丁并運行了,diff或者git diff在epan / dissectors目錄中,則可以在該子目錄中運行它。人們最好不要提交那樣的補丁,尤其是當他們只補丁存在于多個目錄(例如CMakeLists.txt)中的文件時。
二進制包
交付二進制軟件包使最終用戶更容易在其目標系統上安裝Wireshark。本節將說明二進制軟件包的制作方法。
包裝指引
創建和分發第三方Wireshark軟件包或重新分發官方Wireshark軟件包的任何人都應遵循以下準則。
拼寫和大寫
Wireshark的首字母大寫為“ W”,其他所有字母均為小寫。特別是“ WireShark”是不正確的。
主要網址
官方的Wireshark項目URL是https://www.wireshark.org/。
下載網址
官方程序包分布在主Web服務器(www.wireshark.org)上,并包含 許多下載鏡像。軟件包的規范位置 在每臺服務器的all_versions子目錄中。
例如,如果打包系統鏈接到或下載了源tarball,而您想從1.na.dl.wireshark.org下載,請使用
https://1.na.dl.wireshark.org/download/src/all-versions/wireshark-3.3.0.tar.xz
代替
https://1.na.dl.wireshark.org/download/src/wireshark-3.3.0.tar.xz
Artwork
徽標和圖標的插圖可以在發行版的圖像目錄中找到。可在以下位置在線獲得
https://code.wireshark.org/review/gitweb?p=wireshark.git;a=tree;f=image;hb=HEAD
Licensing
Wireshark是根據GNU通用公共許可證版本2或更高版本發布的。確保您和您的包裹符合此許可證。
Trademarks
Wireshark和“ fin”徽標是Wireshark Foundation的注冊商標。確保您和您的包裹符合商標法。
Privileges
所有需要提升特權的函數調用都在dumpcap中。
WIRESHARK包含超過三百萬行源代碼。不要將它們作為根運行。
當以根用戶身份運行Wireshark和TShark時,將顯示警告。
在非Windows系統上,有兩個配置時間選項會影響普通用戶捕獲流量和列出接口所需的特權:
-DDUMPCAP_INSTALL_OPTION=capabilities
使用cap_net_admin和cap_net_raw功能安裝dumpcap。僅Linux。
-DDUMPCAP_INSTALL_OPTION = suid
安裝dumpcap setuid root。
非root用戶必須具備這些權限才能在大多數系統上進行捕獲,例如,如果該用戶無權訪問/ dev / bpf *,則可以在Linux或FreeBSD上捕獲。在Linux上,安裝setcap優于安裝setuid。如果-DDUMPCAP_INSTALL_OPTION=capabilities使用,它將覆蓋任何setuid設置。
該-DENABLE_CAP選項僅在將dumpcap安裝為setuid時有用。如果啟用,dumpcap將嘗試在保留CAP_NET_ADMIN和CAP_NET_RAW 功能的同時放棄其可能擁有的setuid特權。如果找到了Linux功能庫(取決于它),則默認情況下啟用它。
請注意,啟用setcap或setuid安裝將允許捕獲系統上所有用戶的數據包。如果不希望這樣做,則可以將dumpcap執行限制為特定的組或用戶。以下兩個示例顯示如何分別使用setcap和setuid限制訪問:
# groupadd -g packetcapture
# chmod 750 /usr/bin/dumpcap
# chgrp packetcapture /usr/bin/dumpcap
# setcap cap_net_raw,cap_net_admin+ep /usr/bin/dumpcap
# groupadd -g packetcapture
# chgrp packetcapture /usr/bin/dumpcap
# chmod 4750 /usr/bin/dumpcap
Customization
可以通過運行添加自定義版本信息 tools/make-version.pl。如果您的軟件包包含重大更改,我們建議您使用此軟件包將其與Wireshark官方發行版區分開。
$ tools / make-version.pl –set-release –untagged-version-extra =-{vcsinfo} -FooCorp –tagged-version-extra = -FooCorp
有關tools/make-version.pl詳細信息,請參見。
與每個發行版相對應的Git版本位于version.h中。它定義為字符串。如果您需要數字定義,請告訴我們。
如果您在此處未解決問題,請聯系wireshark-dev [AT] wireshark.org。
Debian:.deb軟件包
Debian軟件包是使用dpkg-buildpackage構建的,它基于在debian下的源代碼樹中找到的信息。請參閱 https://www.debian.org/doc/manuals/maint-guide/build.en.html,以更深入地討論構建過程。
在wireshark目錄中,鍵入:
$ dpkg-buildpackage -b -us -uc -jauto
構建Debian軟件包。
紅帽:.rpm軟件包
您可以使用rpm-package目標來構建RPM軟件包。軟件包版本是從當前git HEAD派生的,因此您必須從git checkout構建。
該軟件包是使用rpmbuild構建的,它是包括Red Hat,Fedora和openSUSE在內的許多Linux版本的標準配置。每次構建 RPM時,該過程都會在$ {CMAKE_BINARY_DIR} / packaging / rpm / BUILD中創建一個干凈的構建環境 。控制構建的設置位于 $ {CMAKE_SOURCE_DIR} /packaging/rpm/wireshark.spec.in中。生成的SPEC文件包含CMake標志和RPM構建環境的其他設置。其中許多來自父CMake環境。值得注意的是:
- _prefix is set to CMAKE_INSTALL_PREFIX. By default this is /usr/local. Pass
-DCMAKE_INSTALL_PREFIX=/usrto create a package that installs into /usr. - Whether or not to create the “wireshark-qt” package (
-DBUILD_wireshark). - Lua, c-ares, nghttp2, and other library support (
-DENABLE_…?). - Building with Ninja (
-G Ninja).
在構建目錄中,鍵入:$ ninja rpm-package
# …or, if you’re using GNU make…
$ make rpm-package
來構建二進制rpm和源rpm。當它完成時,會有一條消息說明在哪里可以找到構建的RPM。
這可能需要一段時間
這將創建一個tarball,將其提取,編譯Wireshark并構建一個程序包。這可能需要很長時間。您可以使用Ninja來加快此過程。如果您使用的是GNU make,則可以將以下內容添加到~/.rpmmacros文件中以啟用并行構建:
%_smp_mflags -j %(grep -c processor /proc/cpuinfo)
構建RPM包,需要相當多的軟件包和庫包括GLib和gcc,bison,flex,Asciidoctor,和Qt開發工具,如uic和moc。通常,可以通過安裝qt5-devel軟件包來獲得所需的Qt軟件包。有關構建要求的完整列表,請在packages / rpm / wireshark.spec.in中查找“ BuildRequires”行 。
macOS:.dmg軟件包
macOS軟件包是使用macOS打包工具構建的,該工具基于在package / macosx下的源代碼樹中找到的信息。它需要Asciidoctor和dmgbuild。
在構建目錄中,鍵入:
$ ninja dmg_package
# …or, if you’re using GNU make…
$ make dmg_package
Windows:NSIS .exe安裝程序
在Nullsoft的安裝系統是Windows系統免費安裝。NSIS是基于腳本的。您可以在Packaging / nsis / wireshark.nsi中找到主要的Wireshark安裝程序生成腳本。
使用CMake進行構建時,必須首先構建nsis_package_prep目標,然后構建nsis_package目標,例如
> msbuild /m /p:Configuration=RelWithDebInfo nsis_package_prep.vcxproj
> msbuild /m /p:Configuration=RelWithDebInfo nsis_package.vcxproj
Windows:PortableApps .paf.exe程序包
PortableApps.com是一種環境,允許用戶從便攜式介質運行流行的應用程序。
安裝PortableApps.com平臺。為“所有用戶”安裝,將其放置在中C:\PortableApps。添加以下應用:
- NSIS Portable (Unicode)
- PortableApps.com Installer
- PortableApps.com Launcher
- PortableApps.com AppCompactor
當CMake的建設首先必須建立nsis_package_prep目標(這需要普通包裝的依賴護理),其次是 portableapps_package目標,如
> msbuild /m /p:Configuration=RelWithDebInfo nsis_package_prep.vcxproj
> msbuild /m /p:Configuration=RelWithDebInfo portableapps_package.vcxproj
Display Filter
MimeType:application / vnd.wireshark.displayfilter
利用此mime類型可以拖放顯示過濾器。
{
"filter": "udp.port == 8080",
"field": "udp.port",
"description": "UDP Port"
}
Coloring Rules
MimeType: application/vnd.wireshark.coloringrules
在著色規則對話框中拖放顏色規則。
{
"coloringrules" :
[
{
"disabled": false,
"name": "UDP Ports for 8080",
"filter": "udp.port == 8080",
"foreground": "[0x0000, 0x0000, 0x0000]",
"background": "[0xFFFF, 0xFFFF, 0xFFFF]"
}
]
}
Filter List
MimeType: application/vnd.wireshark.filterlist
僅供內部使用 -在過濾器列表上用于在列表中移動條目
Column List
MimeType: application/vnd.wireshark.columnlist
僅供內部使用 -在列列表中用于在列表中移動條目
Wireshark中文使用教程(開發版)
推薦文章: