前提條件:越獄狀態(tài)下
起因:由于蘋果在iOS7以后對sysctl和ioctl進(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個源都可以下載到

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

圖中就能看到對應(yīng)IP的MAC地址.
功能是實現(xiàn)了,但是這個要集成到代碼里,可不好搞啊,剛開始我是直接提取了deb,一共包括2個deb,一個是arp-scan.deb,一個是libpcap.deb,后面這個是其依賴庫!
然后我想的是直接通過代碼來安裝這2個deb,之后使用命令啟動,最后發(fā)現(xiàn)要成功安裝deb這需要很多的依賴,和我的需求不符.
然后我又想了個辦法,自己編譯一個支持arm64的arp-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,然后將其解壓,文件為

然后我們開始編譯支持
arm64結(jié)構(gòu)的libpcap由于
libpcap支持cmake所以我們在當(dāng)前目錄下建立一個
build文件夾,然后打開終端進(jìn)入build文件夾執(zhí)行cmake .. -G Xcode
等執(zhí)行完成后,在
build目錄下就會自動生成個XCode工程
雙擊
pcap.xcodeproj打開工程選擇pcap_static

然后將其改為如下圖

然后
pcap-bpf.c會報錯,將其內(nèi)容注釋即可成功build(但是最后打包出來的有沒有功能缺陷暫時未知)因為我后面用了另一種方式獲取了靜態(tài)庫.這是使用lipo查看打包出來的架構(gòu)
因為對交叉編譯不太熟悉,所以我也不知道這個編譯出來的庫是否可以用,在后面的工作中,我發(fā)現(xiàn)了可以直接從手機(jī)中導(dǎo)出,所以我直接使用了導(dǎo)出的靜態(tài)庫,以后對交叉編譯熟悉了再回過來看這個報錯問題.
在cydia中可以看到libpcap的目錄結(jié)構(gòu)

直接使用
scp或者愛思助手直接將這些文件全部拖出來
可以直接下載我提取的:下載地址
編譯arp-scan
在這里先下載arp-scan的源碼
然后使用MonkeyDev建立一個Commond-Line工程,將pacp的靜態(tài)庫和相應(yīng)頭文件拉進(jìn)去,頭文件可以在上面的下載地址里找到

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

因為
arp-scan也使用了交叉編譯,有很多的宏,所以arp-scan.c文件里我自己將宏去掉,然后將一些實現(xiàn)全部移到了.c文件里
但要注意一點是在
get_hardware_address方法實現(xiàn)里,
if (ifm->ifm_type != RTM_IFINFO || (ifm->ifm_addrs & RTA_IFP) == 0)
中的RTM_IFINFO和RTA_IFP是<net/route.h>中的宏定義,iOS里是沒有這個宏的,所以我直接將其復(fù)制過來
if (ifm->ifm_type != 0xe || (ifm->ifm_addrs & 0x10) == 0)
將arp-scan.c中的main函數(shù)改個名字

然后在
main.m里調(diào)用
然后打包成二進(jìn)制到手機(jī)上測試

大功告成!