iOS掃描局域網(wǎng)iP并通過libpcap獲取對應(yīng)的mac地址

前提條件:越獄狀態(tài)下
起因:由于蘋果在iOS7以后對sysctlioctl進(jìn)行了技術(shù)處理,無法獲取到正確的MAC地址,返回的都是02:00:00:00:00:00


通過查找資料,得知cydia有一款插件可以進(jìn)行掃描出MAC地址,名稱為arp-scan,這款插件在http://repo.hackyouriphone.org/https://mcapollo.githun.io/Public/這2個源都可以下載到

-w480

然后ssh到手機(jī)上使用arp-acan -l查看,如下圖

-w632

圖中就能看到對應(yīng)IP的MAC地址.


功能是實現(xiàn)了,但是這個要集成到代碼里,可不好搞啊,剛開始我是直接提取了deb,一共包括2個deb,一個是arp-scan.deb,一個是libpcap.deb,后面這個是其依賴庫!
然后我想的是直接通過代碼來安裝這2個deb,之后使用命令啟動,最后發(fā)現(xiàn)要成功安裝deb這需要很多的依賴,和我的需求不符.

然后我又想了個辦法,自己編譯一個支持arm64arp-scan從網(wǎng)絡(luò)上下載然后放到手機(jī)中,將libpcap依賴也從網(wǎng)絡(luò)下載到手機(jī)中,然后使用命令啟動,雖然這樣好像可以實現(xiàn),但是麻煩之處在于,需要將編譯的二進(jìn)制文件復(fù)制到/usr/local/bin目錄下,還有其他的依賴文件,需要手動修復(fù)路徑,而且通過命令執(zhí)行出來的結(jié)果還需要我手動去提取,也是一件很麻煩的事.而且只能同步等待掃描結(jié)果,如果子網(wǎng)很大,那將一直卡主.也只能放棄此方法


最終解決方案

自己將libpcap編譯成.a靜態(tài)庫,然后使用源碼集成arp-scan,從而就可以實現(xiàn)功能,也不需要使用命令執(zhí)行了,但這里面也踩了不少坑(主要還是因為對跨平臺不熟).

首先去tcpdump下載所需要的依賴libpcap
我下載的是libpcap-1.9.1.tar.gz,然后將其解壓,文件為

-w209

然后我們開始編譯支持arm64結(jié)構(gòu)的libpcap
由于libpcap支持cmake
所以我們在當(dāng)前目錄下建立一個build文件夾,然后打開終端進(jìn)入build文件夾執(zhí)行
cmake .. -G Xcode
-w215

等執(zhí)行完成后,在build目錄下就會自動生成個XCode工程
-w1044

雙擊pcap.xcodeproj打開工程選擇pcap_static
-w598

-w1145

然后將其改為如下圖
-w715

然后pcap-bpf.c會報錯,將其內(nèi)容注釋即可成功build(但是最后打包出來的有沒有功能缺陷暫時未知)因為我后面用了另一種方式獲取了靜態(tài)庫.這是使用lipo查看打包出來的架構(gòu)
-w673

因為對交叉編譯不太熟悉,所以我也不知道這個編譯出來的庫是否可以用,在后面的工作中,我發(fā)現(xiàn)了可以直接從手機(jī)中導(dǎo)出,所以我直接使用了導(dǎo)出的靜態(tài)庫,以后對交叉編譯熟悉了再回過來看這個報錯問題.


cydia中可以看到libpcap的目錄結(jié)構(gòu)

-w254

直接使用scp或者愛思助手直接將這些文件全部拖出來
-w414

可以直接下載我提取的:下載地址


編譯arp-scan

在這里先下載arp-scan的源碼
然后使用MonkeyDev建立一個Commond-Line工程,將pacp的靜態(tài)庫和相應(yīng)頭文件拉進(jìn)去,頭文件可以在上面的下載地址里找到

-w270

將arp的這幾個文件拖進(jìn)來
-w244

因為arp-scan也使用了交叉編譯,有很多的宏,所以arp-scan.c文件里我自己將宏去掉,然后將一些實現(xiàn)全部移到了.c文件里
-w332

但要注意一點是在get_hardware_address方法實現(xiàn)里,

if (ifm->ifm_type != RTM_IFINFO || (ifm->ifm_addrs & RTA_IFP) == 0)

中的RTM_IFINFORTA_IFP<net/route.h>中的宏定義,iOS里是沒有這個宏的,所以我直接將其復(fù)制過來

if (ifm->ifm_type != 0xe || (ifm->ifm_addrs & 0x10) == 0)

arp-scan.c中的main函數(shù)改個名字

-w281

然后在main.m里調(diào)用
-w341

然后打包成二進(jìn)制到手機(jī)上測試
-w536

大功告成!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容