| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 652 人关注过本帖
标题:我正在用C语言编写简单的ARP请求包,出现了错误,找不出来,大虾帮忙看下
取消只看楼主 加入收藏
hb19860307
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-11-11
收藏
 问题点数:0 回复次数:0 
我正在用C语言编写简单的ARP请求包,出现了错误,找不出来,大虾帮忙看下
每次到pack函数填充的时候都会出现段错误,百思不得其解,想问问哪的问题,谢谢



#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <signal.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/ip_icmp.h>
#include <linux/if_ether.h>
#define ETH_HW_ADDR_LEN 6
#define IP_ADDR_LEN 4
#define DEST_IP "192.168.0.1"
struct arp_packet
{
u_char targ_hw_addr[ETH_HW_ADDR_LEN];
u_char src_hw_addr[ETH_HW_ADDR_LEN];
u_short frame_type;
u_short hw_type;
u_short prot_type;
u_char hw_addr_size;
u_char prot_addr_size;
u_short op;
u_char sndr_hw_addr[ETH_HW_ADDR_LEN];
u_char sndr_ip_addr[IP_ADDR_LEN];
u_char rcpt_hw_addr[ETH_HW_ADDR_LEN];
u_char rcpt_ip_addr[IP_ADDR_LEN];
u_char padding[18];
};
// 函数声明:
void pack(char *);
struct arp_packet arp_pack;
int sockfd;
int main(int argc, char *argv[])
{
    struct sockaddr *sockaddr;
    if(argc != 2)
    {
        printf("useage:%s target_IP\n",argv[1]);
        exit(1);
    }
    sockfd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_RARP));
    if(sockfd < 0)
    {
        perror("socket");
        exit(1);
    }
   
    pack(argv[2]);
   
    if(sendto(sockfd, &arp_pack, sizeof(arp_pack), 0, sockaddr, sizeof(*sockaddr)) < 0)
    {
        perror("sendto");
        exit(1);
    }
    close(sockfd);
    exit(0);
}
void pack(char * p)
{
    struct in_addr src_in_addr, targ_in_addr;
    struct ifreq ifr_hw;
    unsigned long HW = 0xffffff;
   
   
    arp_pack.frame_type = htons(0x0806);
        arp_pack.hw_type = htons(1);
        arp_pack.prot_type = htons(0x0800);
        arp_pack.hw_addr_size = ETH_HW_ADDR_LEN;
        arp_pack.prot_addr_size = IP_ADDR_LEN;
        arp_pack.op = htons(1);
        bzero(arp_pack.padding, 18);
    strcpy(ifr_hw.ifr_name, "eth0");
    if(ioctl(sockfd, SIOCGIFHWADDR, &ifr_hw) < 0)
    {
        perror("ioctl hw");
        exit(1);
    }
   
      
    memcpy(arp_pack.targ_hw_addr,&(HW) , 6);
        memcpy(arp_pack.rcpt_hw_addr,&(HW) , 6);
        memcpy(arp_pack.src_hw_addr, ifr_hw.ifr_addr.sa_data, 6);
        memcpy(arp_pack.sndr_hw_addr, ifr_hw.ifr_addr.sa_data, 6);
        src_in_addr.s_addr = inet_addr(DEST_IP);
        targ_in_addr.s_addr = inet_addr(p);
        memcpy(arp_pack.sndr_ip_addr, &src_in_addr, IP_ADDR_LEN);
        memcpy(arp_pack.rcpt_ip_addr, &targ_in_addr, IP_ADDR_LEN);
}
搜索更多相关主题的帖子: 编写 请求 C语言 ARP 
2009-11-11 14:04
快速回复:我正在用C语言编写简单的ARP请求包,出现了错误,找不出来,大虾帮忙看 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023319 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved