局域網(wǎng)內(nèi) UDP 獲取 MAC 地址

名詞及協(xié)議

1.UDP

UDP是面向無連接的通訊協(xié)議组贺,UDP數(shù)據(jù)包括目的端口號(hào)和源端口號(hào)信息,由于通訊不需要連接祖娘,所以可以實(shí)現(xiàn)廣播發(fā)送失尖。
UDP通訊時(shí)不需要接收方確認(rèn),屬于不可靠的傳輸渐苏,可能會(huì)出現(xiàn)丟包現(xiàn)象掀潮,實(shí)際應(yīng)用中要求程序員編程驗(yàn)證。
UDP與TCP位于同一層琼富,但它不管數(shù)據(jù)包的順序仪吧、錯(cuò)誤或重發(fā)。因此公黑,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù)邑商,UDP主要用于那些面向查詢---應(yīng)答的服務(wù)摄咆,例如NFS凡蚜。相對(duì)于FTP或Telnet,這些服務(wù)需要交換的信息量較小吭从。使用UDP的服務(wù)包括NTP(網(wǎng)絡(luò)時(shí)間協(xié)議)和DNS(DNS也使用TCP)朝蜘。
欺騙UDP包比欺騙TCP包更容易,因?yàn)閁DP沒有建立初始化連接(也可以稱為握手)(因?yàn)樵趦蓚€(gè)系統(tǒng)間沒有虛電路)涩金,也就是說谱醇,與UDP相關(guān)的服務(wù)面臨著更大的危險(xiǎn)暇仲。

2.NETBIOS

NetBIOS是網(wǎng)絡(luò)的基本輸入輸出系統(tǒng)。
NetBIOS 定義了一種軟件接口以及在應(yīng)用程序和連接介質(zhì)之間提供通信接口的標(biāo)準(zhǔn)方法副渴。NetBIOS 是一種會(huì)話層協(xié)議奈附,應(yīng)用于各種 LAN (Ethernet、Token Ring 等)和 WAN 環(huán)境煮剧,諸如 TCP/IP斥滤、PPP 和 X.25 網(wǎng)絡(luò)。
NetBIOS 使得應(yīng)用程序無需了解包括差錯(cuò)恢復(fù)(會(huì)話模式)在內(nèi)的網(wǎng)絡(luò)細(xì)節(jié)勉盅。NetBIOS 請(qǐng)求以網(wǎng)絡(luò)控制塊(NCB:Network Control Block)的形式提供佑颇,NCB 中包含了信息存放位置和目標(biāo)名稱等信息。
NetBIOS 提供開放系統(tǒng)互聯(lián)(OSI)模型中的會(huì)話層和傳輸層服務(wù)草娜,但不支持標(biāo)準(zhǔn)幀或數(shù)據(jù)格式的傳輸挑胸。NetBIOS 擴(kuò)展用戶接口(NetBEUI)支持標(biāo)準(zhǔn)幀格式,它為 NetBIOS 提供網(wǎng)絡(luò)層和傳輸層服務(wù)支持宰闰。
NetBIOS 支持兩種通信模式:會(huì)話(session)或數(shù)據(jù)報(bào)(datagram)茬贵。會(huì)話模式是指兩臺(tái)計(jì)算機(jī)為“對(duì)話”建立一個(gè)連接,允許處理大量信息移袍,并支持差錯(cuò)監(jiān)測(cè)和恢復(fù)功能闷沥。數(shù)據(jù)報(bào)模式面向“無連接”(信息獨(dú)立發(fā)送)操作,發(fā)送的信息較小咐容,由應(yīng)用程序提供差錯(cuò)監(jiān)測(cè)和恢復(fù)功能舆逃。此外數(shù)據(jù)報(bào)模式也支持將信息廣播到局域網(wǎng)中的每臺(tái)計(jì)算機(jī)上。

3.ARP

地址解析協(xié)議戳粒,即ARP(Address Resolution Protocol)路狮,是根據(jù)IP地址獲取物理地址的一個(gè)TCP/IP協(xié)議。主機(jī)發(fā)送信息時(shí)將包含目標(biāo)IP地址的ARP請(qǐng)求廣播到網(wǎng)絡(luò)上的所有主機(jī)蔚约,并接收返回消息奄妨,以此確定目標(biāo)的物理地址;收到返回消息后將該IP地址和物理地址存入本機(jī)ARP緩存中并保留一定時(shí)間苹祟,下次請(qǐng)求時(shí)直接查詢ARP緩存以節(jié)約資源砸抛。地址解析協(xié)議是建立在網(wǎng)絡(luò)中各個(gè)主機(jī)互相信任的基礎(chǔ)上的,網(wǎng)絡(luò)上的主機(jī)可以自主發(fā)送ARP應(yīng)答消息树枫,其他主機(jī)收到應(yīng)答報(bào)文時(shí)不會(huì)檢測(cè)該報(bào)文的真實(shí)性就會(huì)將其記入本機(jī)ARP緩存直焙;由此攻擊者就可以向某一主機(jī)發(fā)送偽ARP應(yīng)答報(bào)文,使其發(fā)送的信息無法到達(dá)預(yù)期的主機(jī)或到達(dá)錯(cuò)誤的主機(jī)砂轻,這就構(gòu)成了一個(gè)ARP欺騙奔誓。ARP命令可用于查詢本機(jī)ARP緩存中IP地址和MAC地址的對(duì)應(yīng)關(guān)系、添加或刪除靜態(tài)對(duì)應(yīng)關(guān)系等搔涝。相關(guān)協(xié)議有RARP厨喂、代理ARP和措。NDP用于在IPv6中代替地址解析協(xié)議。

4.子網(wǎng)掩碼

子網(wǎng)掩碼(subnet mask)又叫網(wǎng)絡(luò)掩碼蜕煌、地址掩碼派阱、子網(wǎng)絡(luò)遮罩,它是一種用來指明一個(gè)IP地址的哪些位標(biāo)識(shí)的是主機(jī)所在的子網(wǎng)斜纪,以及哪些位標(biāo)識(shí)的是主機(jī)的位掩碼颁褂。子網(wǎng)掩碼不能單獨(dú)存在,它必須結(jié)合IP地址一起使用傀广。子網(wǎng)掩碼只有一個(gè)作用颁独,就是將某個(gè)IP地址劃分成網(wǎng)絡(luò)地址和主機(jī)地址兩部分。
子網(wǎng)掩碼是一個(gè)32位地址伪冰,用于屏蔽IP地址的一部分以區(qū)別網(wǎng)絡(luò)標(biāo)識(shí)和主機(jī)標(biāo)識(shí)誓酒,并說明該IP地址是在局域網(wǎng)上,不是在遠(yuǎn)程網(wǎng)上贮聂。

UDP 獲取 MAC 原理

1. ARP獲取 MAC

局域網(wǎng)中的設(shè)備互相通信是依靠 MAC 地址定向傳輸?shù)目扛蹋栽O(shè)備 A 要想給設(shè)備 B 發(fā)送數(shù)據(jù),需要先通過發(fā)送ARP命令來獲取B的MAC地址吓懈,并將B的MAC地址緩存在ARP緩存在列表中(有效時(shí)間為兩分鐘)歼冰,再將需要發(fā)送的數(shù)據(jù)進(jìn)行封包加上B設(shè)備的MAC地址等發(fā)送出去。即如果A設(shè)備想知道B設(shè)備的mac地址耻警,只需要通過B設(shè)備的 IP 發(fā)送ARP數(shù)據(jù)包解析返回?cái)?shù)據(jù)包就可以得到B設(shè)備的 IP 地址隔嫡。

綜上所述及根據(jù)實(shí)測(cè)情況,在android中獲取設(shè)備mac地址有三種方式:

  1. 由于并沒有對(duì)java層開放ARP接口甘穿,所以需要JNI來實(shí)現(xiàn)ARP發(fā)送和接受腮恩,根據(jù)收到的數(shù)據(jù)自行解析MAC地址
  2. 在java層對(duì)需要獲取mac地址的目標(biāo)設(shè)備發(fā)送廣播,促使系統(tǒng)發(fā)送ARP來查詢更新發(fā)起設(shè)備的ARP緩存温兼,然后讀取解析緩存列表獲取 MAC 地址秸滴。ARP緩存目錄 /proc/net/arp
  3. 通過NETBIOS服務(wù)獲取,這種方式需要目標(biāo)設(shè)備支持NETBIOS服務(wù), 根據(jù)返回值可以解析出目標(biāo)設(shè)備的 MAC募判、NETBISO信息荡含、計(jì)算機(jī)名等。測(cè)試發(fā)現(xiàn)android届垫、ios 系統(tǒng)普遍禁用了應(yīng)用監(jiān)聽NETBIOS服務(wù)端口释液,不能獲取到android、ios設(shè)備的 MAC 地址敦腔,只能獲取到電腦的 MAC 地址均澳。

子網(wǎng)段獲取

根據(jù)本機(jī)IP和子網(wǎng)掩碼或者子網(wǎng)掩碼位 可以計(jì)算確定該局域網(wǎng)的子網(wǎng)段

android獲取子網(wǎng)掩碼位

private static final int BUF = 8 * 1024;
private static final String CMD_IP = " -f inet addr show %s";
private static final String PTN_IP1 = "\\s*inet [0-9\\.]+\\/([0-9]+) brd [0-9\\.]+ scope global %s$";
private static final String PTN_IP2 = "\\s*inet [0-9\\.]+ peer [0-9\\.]+\\/([0-9]+) scope global %s$";
private static final String PTN_IF = "^%s: ip [0-9\\.]+ mask ([0-9\\.]+) flags.*";
private static String intf = "eth0";
public static int getIpmask() {
       int mask = 24;
       String match;
       try {
            if ((match = runCommand("/system/xbin/ip", String.format(CMD_IP, intf), String.format(PTN_IP1, intf))) != null) {
                mask = Integer.parseInt(match);
            } else if ((match = runCommand("/system/xbin/ip", String.format(CMD_IP, intf), String.format(PTN_IP2, intf))) != null) {
                mask = Integer.parseInt(match);
            } else if ((match = runCommand("/system/bin/ifconfig", " " + intf, String.format(PTN_IF, intf))) != null) {
                double sum = -2;
                String[] part = match.split("\\.");
                for (String p : part) {
                    sum += 256D - Double.parseDouble(p);
                }
                mask = 32 - (int) (Math.log(sum) / Math.log(2d));
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return mask;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市符衔,隨后出現(xiàn)的幾起案子找前,更是在濱河造成了極大的恐慌,老刑警劉巖判族,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躺盛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡形帮,警方通過查閱死者的電腦和手機(jī)槽惫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辩撑,“玉大人界斜,你說我怎么就攤上這事『霞剑” “怎么了各薇?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)君躺。 經(jīng)常有香客問我峭判,道長(zhǎng),這世上最難降的妖魔是什么棕叫? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任林螃,我火速辦了婚禮,結(jié)果婚禮上俺泣,老公的妹妹穿的比我還像新娘疗认。我一直安慰自己,他們只是感情好伏钠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布侮邀。 她就那樣靜靜地躺著,像睡著了一般贝润。 火紅的嫁衣襯著肌膚如雪绊茧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天打掘,我揣著相機(jī)與錄音华畏,去河邊找鬼。 笑死尊蚁,一個(gè)胖子當(dāng)著我的面吹牛亡笑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播横朋,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仑乌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晰甚,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤衙传,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后厕九,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓖捶,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年扁远,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俊鱼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畅买,死狀恐怖并闲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谷羞,我是刑警寧澤帝火,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站洒宝,受9級(jí)特大地震影響购公,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雁歌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一宏浩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靠瞎,春花似錦厨疙、人聲如沸类腮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金抡。三九已至沪羔,卻和暖如春臣镣,著一層夾襖步出監(jiān)牢的瞬間谣膳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工何吝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溉委,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓爱榕,卻偏偏與公主長(zhǎng)得像瓣喊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子黔酥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容