• 大小: 7KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-07-26
  • 语言: Java
  • 标签: arp  udp  

资源简介

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

评论

共有 条评论