资源简介
arpSend.c为arp包发送事例
arpRecv.c为arp包接受事例
main.c为android平台的接受arp包分析padding字段后对方发送udp原始套接字事例
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define src_addr “10.10.3.1“ //需要进行arp解析的ip
#define device “eno1“ //本机的哪块网卡
#define fill_buf “windakaSear“
int socket_id;
char *target = src_addr;
int send_count = 0;
int recv_count = 0;
struct in_addr src dst;
struct sockaddr_ll me he;
struct timeval send_time recv_time;
struct in_addr get_src_ip(char * devices)//获得本机相应网卡的ip
{
struct sockaddr_in saddr;
int sock_id = socket(AF_INET SOCK_DGRAM 0);//设置数据报socket
if (sock_id < 0) {
perror(“socket“);
exit(2);
}
if (devices) {
if (setsockopt(sock_id SOL_SOCKET SO_BINDTODEVICE device strlen(device) + 1) == -1)//将socketbind到网卡上
perror(“WARNING: interface is ignored“);
}
int alen = sizeof(saddr);
memset(&saddr 0 sizeof(saddr));
saddr.sin_port = htons(0x1000);//设置端口
saddr.sin_family = AF_INET;
if (connect(sock_id (struct sockaddr*)&saddr sizeof(saddr)) == -1) {//将socket连接到相应的inet地址上
perror(“connect“);
exit(2);
}
if (getsockname(sock_id (struct sockaddr*)&saddr &alen) == -1) {//通过socket获得绑定的ip地址
perror(“getsockname“);
exit(2);
}
close(sock_id);
return saddr.sin_addr;
}
int check_device(char* if_dev int ss)//网卡和socket 将网卡设置为混杂模式?
{
int ifindex;
struct ifreq ifr;
memset(&ifr 0 sizeof(ifr));
strncpy(ifr.ifr_name if_dev IFNAMSIZ - 1);//网卡设备名
if (ioctl(ss SIOCGIFINDEX &ifr) < 0) {
fprintf(stderr “arping: unknown iface %s\n“ if_dev);
exit(2);
}
ifindex = ifr.ifr_ifindex;
if (ioctl(ss SIOCGIFFLAGS (char*)&ifr)) {
perror(“ioctl(SIOCGIFFLAGS)“);
exit(2);
}
if (!(ifr.ifr_flags&IFF_UP)) {
printf(“Interface \“%s\“ is down\n“ if_dev);
exit(2);
}
if (ifr.ifr_flags&(IFF_NOARP | IFF_LOOPBACK)) {
printf(“Interface \“%s\“ is not ARPable\n“ if_dev);
exit(2);
}
return ifindex;
} // check_device()
int socket_init()
{
int s s_errno;
s = socket(PF_PACKET SOCK_DGRAM 0);//数据包
s_errno = errno;
me.sll_family = AF_PACKET;
me.sll_ifindex = check_device(device s);
me.sll_protocol = htons(ETH_P_ARP);
if (bind(s (struct sockaddr*)&me sizeof(me)) == -1) {
perror(“bind“);
exit(2);
}
int alen = sizeof(me);
if (getsockname(s (struct sockaddr*)&me &alen) == -1) {
perror(“getsockname“);
exit(2);
}
if (me.sll_halen == 0) {
printf(“Interface \“%s\“ is
相关资源
- 计算机网络课程设计报告_DH算法_Wir
- socket编程实验报告
- Android源码简单实现手机与电脑的UDP通
- Java NetWork Programming 4th
- itextsharp5.5.10源代码
- java写的RPG小游戏
- android UDP通信demo,仅文字
- udp通信源码,android即时通信简单代码
- android_udp服务端与客户端超简单通信
- AndroidStudio UDP测试程序
- pc端与android udp 通信
- UDP客户端demo
- 基于开源EasyPR的车牌识别Android工程源
- Android 设备局域网内 一台做服务器一
- android实现局域网聊天 - UDP实现
- 调用cordova插件的一个ionic,插件包含
- android之同一wifi下两台设备通过UDP进行
- UDP Server服务器端 Demo
- 网络应用程序大作业,使用tcp和udp完
- Android网络版五子棋
- MFC之UDP编程
- android局域网通信udp,tcp等
- 基于UDP聊天的java代码
- java使用udp协议和硬件进行数据收发处
- socket 基于udp 的双机通讯
- 基于UDP协议的数据包收发程序代码+报
- 可靠UDP传输(java)
- java udp多人聊天室
- Android Socket和串口编程实践TCPUDP串口集
- Java P2P聊天服务端源码
评论
共有 条评论