午夜视频-在线成人-亚洲中文字幕一区-强开小受嫩苞第一次免费视频-黄色小说在线看-www精品-www.三级-蜜桃传媒一区二区-av手机在线-一级黄色片免费-国产中文字幕在线播放-国产精品免费一区二区三区都可以-他禁欲太久了h1v1双处-五月精品-亚洲人成在线播放-宅男在线视频-欧美激情第二页-91精品国产一区-亚洲第一天堂网-色5月婷婷-国内毛片毛片-亚洲精品久久久久久一区二区-一级激情片-人人干人-日韩岛国片-亚洲成a人片77777kkkk-天堂a视频-www.看片-女人喷液视频-亚洲在线观看av

成航先森 成航先森

成都航院計算機系一個學生的個人記錄

 

系統運維

  • 沒有分類目錄

最新文章

系統運維
當前位置: 首頁 ? 系統運維 ? 華為光貓HS8145V交叉編譯靜態tcpdump

華為光貓HS8145V交叉編譯靜態tcpdump

編輯:狂族晨曦 來源:系統運維經驗雜筆 日期:2022-04-03 閱讀: 2,899 次 5 條評論 » 百度已收錄

先森是個網速強迫癥,閑著沒事就喜歡研究光貓、路由器那一套,還希望在任何地方只要有網就能控制家里的設備。可惜先森的電信光貓是大內網,雙層NAT,沒有ipv4公網IP,結果偶然先森發現家里設備都可以直連ipv6了,而且分配到設備的ipv6地址還是公網的,先森就想著使用ipv6來突破網絡限制。

結果,運營商為了保證安全,默認是限制了ipv6入訪的。

由于家里寬帶不是先森辦理的,先森不太方便直接將光貓改為橋接的模式,所幸是先森拿到了光貓超管密碼,還可以通過shell的方式去操作iptables調整入訪策略。但光貓的iptables策略特別多,先森也得為安全考慮,不能直接全放通,所以得進行測試。結果問題來了,光貓的shell中沒有tcpdump的命令,沒法抓包,讓先森調試的心態爆炸,當時各種搜索都沒有找到光貓抓包的方法。

由于ipv6的支持在先森身邊依舊不是那么普遍,像先森公司的商纖就沒有分配ipv6(不知道是不是公司IT把ipv6分配給關了),騰訊云CDN回源也不支持ipv6源站,所以當時先森一條條iptables策略調試的差不多之后,也就擱置了。但是沒法運行tcpdump抓包這個事一直讓先森如鯁在喉,然后最近突然知道了“交叉編譯”這么一個玩意兒,讓先森沉寂的心死灰復燃。

交叉編譯:

交叉編譯是在一個平臺上生成另一個平臺上的可執行代碼。如在x86平臺上編譯ARM平臺上運行的可執行代碼。

先森在折騰的過程中遇到很多坑,在這里記錄一下。

配置情況

光貓:華為HS8145V,已經開啟telnet;

交叉編譯主機:CentOS 7.9 x86_64,其實應該用Ubuntu來交叉編譯更方便,但是先森對這系統不熟。

交叉編譯器的尋找歷程

確認平臺

在網上搜交叉編譯tcpdump的教程,一開始根本沒注意到編譯器,然后直接上手編譯,這就跟平時正常編譯一樣,編譯出來的是gcc編譯的,根本不是交叉編譯的。

網上教程說要確認目標機是arm-linux還是mips-linux什么的,先森看光貓通過telnet登錄的時候有什么BusyBox、Dopra Linux,搜了一圈也沒能明確搜出來華為光貓的系統屬于什么,只是搜到有說華為光貓使用的是海思芯片,屬于arm架構的,最后是`uname -m`確認到華為這個是arm平臺。

選擇arm-linux-gcc

確認了光貓HS8145V是arm后,目標就很明確了,下載一下交叉編譯器,然后開整。

但先森萬萬沒想到,arm-linux-gcc的下載鏈接那么難找,好不容易找到了,結果又發現arm-linux-gcc有很多版本,還要根據光貓arm的情況來選。

arm-linux-gcc的不同版本 -1

arm-linux-gcc的不同版本

那么光貓是什么情況呢,可以在命令行進行查看:

WAP(Dopra Linux) # uname -a
Linux EchoLife_WAP 3.10.53-HULK2 #1 SMP Fri Oct 20 01:08:58 CST 2017 armv7l GNU/Linux

或者直接

WAP(Dopra Linux) # uname -m
armv7l

實際在搜交叉編譯的教程時,要不就是單純的arm-linux-gcc,不然就是gcc-arm-linux-gnueabi和gcc-arm-linux-gnueabihf,所以就搜armv7l屬于哪種。

百度了半天,好像都說armV7屬于armhf,想來armv7l應該也是,但實測不行,還得是armel。

具體可以了解一下:

arm-linux-gnueabi-gcc 和 arm-linux-gnueabihf-gcc:

兩個交叉編譯器分別適用于 armel 和 armhf 兩個不同的架構,armel 和 armhf 這兩種架構在對待浮點運算采取了不同的策略(有 fpu 的 arm 才能支持這兩種浮點運算策略)。

其實這兩個交叉編譯器只不過是 gcc 的選項 -mfloat-abi 的默認值不同。gcc 的選項 -mfloat-abi 有三種值 soft、softfp、hard(其中后兩者都要求arm 里有 fpu 浮點運算單元,soft 與后兩者是兼容的,但 softfp 和 hard 兩種模式互不兼容):

soft: 不用fpu進行浮點計算,即使有fpu浮點運算單元也不用,而是使用軟件模式。

softfp: armel架構(對應的編譯器為 arm-linux-gnueabi-gcc )采用的默認值,用fpu計算,但是傳參數用普通寄存器傳,這樣中斷的時候,只需要保存普通寄存器,中斷負荷小,但是參數需要轉換成浮點的再計算。

hard: armhf架構(對應的編譯器 arm-linux-gnueabihf-gcc )采用的默認值,用fpu計算,傳參數也用fpu中的浮點寄存器傳,省去了轉換,性能最好,但是中斷負荷高。

下載arm-linux-gcc

由于先森arm-linux-gcc的下載地址時比較痛苦,有點難找,所以顯示把各種版本的鏈接在這里列一下。

下載單純的arm-linux-gcc,版本較老,4.4.3貌似是2010年發布的了

資源地址:http://www.friendlyelec.com.cn/download.asp

在頁面中可以找到下載地址:http://112.124.9.243/arm9net/mini2440/linux/arm-linux-gcc-4.4.3-20100728.tar.gz

下載arm-linux-gnueabi或arm-linux-gnueabihf,資源下載列表頁是先選gcc版本,再選編譯器架構,最后還要選架構運行平臺,這里先森選的是最新版本latest-7中的arm-linux-gnueabi的64位系統版本。由于這個頁面加載較慢或者未free無法打開,所以先森把兩個版本的下載地址都貼出來:

資源列表頁:http://releases.linaro.org/components/toolchain/binaries/

armel架構:http://124.156.146.205/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

armhf架構:http://124.156.146.205/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz

配置arm-linux-gcc

# 下載后解壓
tar -xJvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz
# 可選,先森是將其移動重命名了一下
mv gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi /usr/local/arm
# 可選,但建議操作
cd /usr/local/arm/bin
ln -s arm-linux-gnueabi-gcc arm-linux-gcc

建議增加環境變量,不然編譯的時候./configure的參數需要加上'CC=/usr/local/arm/bin'

echo 'export PATH=$PATH:/usr/local/arm/bin' >> /etc/profile
source /etc/profile

添加環境變量后,需要執行`arm-linux-gcc -v`測試一下arm-linux-gcc是否存在問題,可能會遇到下面的問題:

bin/.arm-none-linux-gnueabi-gcc: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
# 解決方法:
yum install -y ld-linux.so.2

到這里終于把arm-linux-gcc部分弄完了,下面進入編譯環節。

交叉編譯libpcap和tcpdump

由于tcpdump需要依賴libpcap,所以需要下載這個包,分別編譯,先森下載的最新版本:

https://www.tcpdump.org/release/tcpdump-4.99.1.tar.gz

https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz

交叉編譯libpcap

前面準備工作做好了,libpcap還是很好編譯的。下載解壓后,進入libpcap目錄中:

./configure --prefix=/tmp/armroot --host=arm-linux --target=arm-linux --with-pcap=linux
make
make install

# –prefix指定目標文件生成路徑(makefile里面的target存放路徑);
# –host、–target都寫成目標平臺即可,例如:arm-liux或mips-linux,光貓是arm的,所以寫arm-linux
# --with-pcap將告訴編譯器我們正在編譯哪種數據包捕獲類型
# 如果前面沒有加arm-linux-gcc的環境變量,那么需要加上CC='/usr/local/arm/bin'編譯鏈路徑

編譯時遇到的問題:

# 問題1:
configure: error: Neither flex nor lex was found.
# 解決:
yum install -y flex bison

# 問題2:
/usr/local/arm/bin/../libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
# 解決:貌似和系統是64位,gcc是32位有關,安裝32位的庫即可
yum install -y libstdc++.i686

# 問題3:
/usr/local/arm/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/as: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
# 解決:
yum -y install zlib.i686

交叉編譯tcpdump

實際測試,tcpdump的交叉編譯,必須是編譯靜態鏈接,編譯器默認是動態鏈接庫。

由于光貓的根路徑是只讀的,而lib庫就在系統路徑中,無法在光貓添加確實的動態鏈接庫文件,所以只能選擇靜態交叉編譯這條路了。

解壓tcpdump包后,進入目錄進行操作:

# 指定靜態交叉編譯
export CFLAGS=-static
export CPPFLAGS=-static
export LDFLAGS=-static

export ac_cv_linux_vers=3
./configure --prefix=/tmp/armroot --host=arm-linux --target=arm-linux
make
make install
# 編譯好的文件就是當前目錄下的tcpdump文件,也可以去--prefix執行的目錄的bin或sbin目錄找到tcpdump

編譯tcpdump時遇到的問題:

# 問題1:
configure: error: cannot determine linux version when cross-compiling
# 解決辦法:我們需要找出我們的 Ubuntu(或 Linux)操作系統內核正在運行的主要版本。執行 uname -a 命令。
# 注意:您的輸出可能會有所不同,但請查找類似于版本號的內容。下面,先森的主機是 3.10.0-1160.45.1.el7.x86_64,我們抓住第一個“3”。
uname -a
Linux VM-0-4-centos 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
# 然后將ac_cv_linux_vers 變量設置為上一個命令中發布的內核版本的主要編號,再嘗試編譯
export ac_cv_linux_vers=3

# 問題2:
/mnt/jffs2/tcpdump: can't load library 'libc.so.6'
# 解決:缺的動態鏈接庫又沒法塞進光貓的系統,所以需要靜態交叉編譯

# 問題3:靜態編譯會遇到此類警告
tcpdump.c:(.text+0x5a6): warning: Using 'initgroups' in statically linked applications requires at runtime the shared libraries from the glibc version used for linkin
# 解決:正常現象,只是警告,不影響使用

建議操作

剝離符號信息,使二進制文件更小,這些符號僅在調試應用程序時有用,而光貓的存儲容量比較小。

[root@VM-0-4-centos bin]# ll -h
total 14M
-rwxr-xr-x 1 root root 1.9K Apr  2 16:32 pcap-config
-rwxr-xr-x 1 root root 6.9M Apr  2 16:33 tcpdump
-rwxr-xr-x 1 root root 6.9M Apr  2 16:33 tcpdump.4.99.1
[root@VM-0-4-centos bin]# arm-linux-gnueabi-strip tcpdump
[root@VM-0-4-centos bin]# ll -h
total 8.4M
-rwxr-xr-x 1 root root 1.9K Apr  2 16:32 pcap-config
-rwxr-xr-x 1 root root 1.5M Apr  2 16:34 tcpdump
-rwxr-xr-x 1 root root 6.9M Apr  2 16:33 tcpdump.4.99.1

拿到光貓上去運行

折騰了這么多,最終能在光貓上運行才是第一目標。

先森是直接把tcpdump放到服務器的web目錄中,然后光貓直接wget下載到光貓中的。

先森在測試交叉編譯的運行中,遇到了很多錯誤,總結下來是以下4種:

# 第一種報錯
WAP(Dopra Linux) # ./tcpdump.Ullegal 
Illegal instruction
# 第二種報錯
WAP(Dopra Linux) # ./tcpdump.libc 
/mnt/jffs2/tcpdump.libc: can't load library 'libc.so.6'
# 第三種報錯
WAP(Dopra Linux) # ./tcpdump.0\:08 
/mnt/jffs2/tcpdump.0:08: can't resolve symbol '__libc_start_main'
# 第四種報錯
WAP(Dopra Linux) # ./android-tcpdump 
android-tcpdump: eth0: You don't have permission to capture on that device
(socket: Operation not permitted)

事實上,除了第四種,前三種都是編譯有問題的版本,第四種只是提醒沒有權限執行。

沒有權限的情況,經過一番搜索,先森找到了再次提權的方法(本來以為shell提權已經是終點了),二次提權只需要su切到root,密碼:admin,可以通過whoami查看當前角色。

二次提權后執行成功 -2

二次提權后執行成功

寫在最后

本來先森是想在文章最后把自己編譯好的文件分享出來的,結果在完善本文的時候搜到了一篇Android官方寫的tcpdump靜態交叉編譯的文檔,其中有詳細的靜態編譯步驟,也有官方編譯好的文件下載地址。先森試了一下,直接下載Android官方編譯的tcpdump也是能夠在光貓運行的,如果先森一開始就搜到了這邊文檔或資源。。。。

文檔地址:https://www.androidtcpdump.com/android-tcpdump/compile

直接下載:https://www.androidtcpdump.com/android-tcpdump/downloads

歷史上的今天:

標簽:
除特別注明外,本站所有文章均為成航先森 www.lzhcjx.cn 原創,本文共7051個字
轉載請注明出處來自http://www.lzhcjx.cn/arm_linux_gcc_tcpdump.html
已有 5 位"計工"發布了激烈的評論,還有N多人圍觀笑而不語評論
的頭像
歡迎發表評論
取消評論

表情
疑問調皮傷心摳鼻黑線微笑可愛奸笑震驚嚇到了撇嘴大兵忍不住笑笑狂罵狂怒噢?鼓掌酷⊙﹏⊙b汗鄙視大哭嘿嘿

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
  1. 的頭像
    QQ2062886936:

    博客賣嗎

    2022-06-27 13:40 回復
  2. 的頭像
    Hcat:

    請問如何把/bin目錄掛載為可讀寫,試過很多方法沒有作用,有沒有交流群之類想一起交流學習一下

    2022-07-24 21:45 回復
  3. 的頭像
    Hcat:

    請問如何把光貓/bin目錄掛載為可讀寫的

    2022-07-25 20:21 回復
    • 博主的Gravatar 頭像

      @Hcat: 這個目前據我所知沒啥好辦法,可能把系統重刷可以搞定,但是這就違背初衷了

      2022-08-30 11:24 回復
官方微信
發表評論 返回頂部
 


主站蜘蛛池模板:
成人在线免费
|
小婷的性泛滥日记h
|
丁香花免费高清完整在线播放
|
超碰91在线
|
欧美黄色录像
|
免费精品视频
|
久久久久久久久久久久久久久久久久
|
阿姨免费高清在线电视剧观看
|
五月婷婷六月丁香
|
欧美va|
国产黄色在线观看
|
91在线看片
|
神马午夜精品95
|
强开乳罩摸双乳吃奶羞羞www
|
91在线|
亚洲图片欧美色图
|
欧美另类视频
|
国产精品123|
久久国产免费
|
久草福利
|
看黄色大片
|
日韩在线观看
|
男人天堂
|
91在线视频观看
|
欧美在线观看视频
|
日韩二区
|
国产精品815.cc红桃
|
欧美aaaaaa
|
亚洲成人免费
|
日韩中文字幕在线播放
|
日本三级电影
|
亚洲午夜久久久久久久久久久
|
全部裸体做爰大片
|
成人做爰69片免费观看
|
青青操在线视频
|
91丝袜一区二区三区
|
香蕉久久网
|
www.亚洲|
欧美一级黄色大片
|
成人一区二区三区
|
精品91
|
人人爽人人爽
|
午夜精品久久久久久久99黑人
|
天堂va蜜桃一区二区三区
|
成人黄色大片
|
欧美日韩精品
|
一级欧美
|
天堂网在线视频
|
蜜桃精品一区二区三区
|
亚洲精品区
|
无码人妻精品一区二区三区不卡
|
欧美在线一区二区
|
另类老妇性bbwbbw
|