Android设备被搜索之RawSocket

背景,初衷

1.需要完成一个设备搜索功能,及通过PC工具可以搜索到局域网中的设备
2.就算IP冲突也能搜索到设备
3.有Android系统源码可以进行系统开发条件。

Raw Socket

raw socket,就是原始套接字,可以接收本机网卡上的数据帧或者数据包,相比正常使用的socket来说,它更底层,数据更原始。

编译环境

在Android系统源码根目录下创建一个文件夹rawSocket,在其中新建两个文件,一个是rawSocket.c (源码),一个是Android.mk(编译脚本)。
文件夹及文件
想要编译代码,就需要编译mk文件。如下是我的配置:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
#编译后的模块名称
LOCAL_MODULE := rawSocket
#源码全称,有多少都要加上
LOCAL_SRC_FILES := rawSocket.c
LOCAL_MODULE_TAGS := optional
#此处是代码导入的必需包,用来获取系统版本等相关信息
LOCAL_STATIC_LIBRARIES :=libcutils 
#编译成可执行文件
include $(BUILD_EXECUTABLE)

需要编译代码前,还需要建立编译环境,及在根目录下执行下面代码:

$  . build/envsetup.sh 

然后切换到rawSocket目录下,输入 mm 即可进行模块编译,编译后的文件会生成到system/bin/路径下,名字就是LOCAL_MODULE对应名字。

RawSocket.c重点代码描述

建立raw socket服务

使用如下代码实现:

int sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

这里说明一下:

  1. 第一个参数使用 PF_PACKET 可以操作链路层的数据
  2. 第二个参数 SOCK_RAW,它表示是包含了MAC层头部信息的原始分组,当然这种类型的套接字在发送的时候需要自己加上一个MAC头部
  3. 第三个参数 htons(ETH_P_ALL) (ETH_P_ALL宏定义为0)时表示收发所有的协议

接收socket数据

使用如下代码实现:

#
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值