Not sure what's going on here but I have several linux header files included and when I compile my program I get the below errors... I'm not sure how I should go about fixing it? Am I NOT supposed to use some of these headers? Source is below as well.
Looking through the headers mentioned in these errors, it's looking like stuff really is defined in multiple places... Like I said, not so sure what to do about it.
Errors:
Code:
codeblox@Lubuntu-pc:~/Programming/C/Network/MITM/src$ gcc -g -o mitm *.c
In file included from mitm.h:12:0,
from create_raw.c:1:
/usr/include/netpacket/packet.h:22:8: error: redefinition of ‘struct sockaddr_ll’
In file included from /usr/include/linux/netdevice.h:30:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from create_raw.c:1:
/usr/include/linux/if_packet.h:12:8: note: originally defined here
In file included from mitm.h:12:0,
from create_raw.c:1:
/usr/include/netpacket/packet.h:51:8: error: redefinition of ‘struct packet_mreq’
In file included from /usr/include/linux/netdevice.h:30:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from create_raw.c:1:
/usr/include/linux/if_packet.h:261:8: note: originally defined here
In file included from mitm.h:14:0,
from create_raw.c:1:
/usr/include/net/if.h:44:5: error: expected identifier before numeric constant
/usr/include/net/if.h:111:8: error: redefinition of ‘struct ifmap’
In file included from /usr/include/linux/netdevice.h:28:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from create_raw.c:1:
/usr/include/linux/if.h:142:8: note: originally defined here
In file included from mitm.h:14:0,
from create_raw.c:1:
/usr/include/net/if.h:126:8: error: redefinition of ‘struct ifreq’
In file included from /usr/include/linux/netdevice.h:28:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from create_raw.c:1:
/usr/include/linux/if.h:176:8: note: originally defined here
In file included from mitm.h:14:0,
from create_raw.c:1:
/usr/include/net/if.h:176:8: error: redefinition of ‘struct ifconf’
In file included from /usr/include/linux/netdevice.h:28:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from create_raw.c:1:
/usr/include/linux/if.h:225:8: note: originally defined here
In file included from mitm.h:12:0,
from get_args.c:1:
/usr/include/netpacket/packet.h:22:8: error: redefinition of ‘struct sockaddr_ll’
In file included from /usr/include/linux/netdevice.h:30:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from get_args.c:1:
/usr/include/linux/if_packet.h:12:8: note: originally defined here
In file included from mitm.h:12:0,
from get_args.c:1:
/usr/include/netpacket/packet.h:51:8: error: redefinition of ‘struct packet_mreq’
In file included from /usr/include/linux/netdevice.h:30:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from get_args.c:1:
/usr/include/linux/if_packet.h:261:8: note: originally defined here
In file included from mitm.h:14:0,
from get_args.c:1:
/usr/include/net/if.h:44:5: error: expected identifier before numeric constant
/usr/include/net/if.h:111:8: error: redefinition of ‘struct ifmap’
In file included from /usr/include/linux/netdevice.h:28:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from get_args.c:1:
/usr/include/linux/if.h:142:8: note: originally defined here
In file included from mitm.h:14:0,
from get_args.c:1:
/usr/include/net/if.h:126:8: error: redefinition of ‘struct ifreq’
In file included from /usr/include/linux/netdevice.h:28:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from get_args.c:1:
/usr/include/linux/if.h:176:8: note: originally defined here
In file included from mitm.h:14:0,
from get_args.c:1:
/usr/include/net/if.h:176:8: error: redefinition of ‘struct ifconf’
In file included from /usr/include/linux/netdevice.h:28:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from get_args.c:1:
/usr/include/linux/if.h:225:8: note: originally defined here
In file included from mitm.h:12:0,
from main.c:1:
/usr/include/netpacket/packet.h:22:8: error: redefinition of ‘struct sockaddr_ll’
In file included from /usr/include/linux/netdevice.h:30:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from main.c:1:
/usr/include/linux/if_packet.h:12:8: note: originally defined here
In file included from mitm.h:12:0,
from main.c:1:
/usr/include/netpacket/packet.h:51:8: error: redefinition of ‘struct packet_mreq’
In file included from /usr/include/linux/netdevice.h:30:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from main.c:1:
/usr/include/linux/if_packet.h:261:8: note: originally defined here
In file included from mitm.h:14:0,
from main.c:1:
/usr/include/net/if.h:44:5: error: expected identifier before numeric constant
/usr/include/net/if.h:111:8: error: redefinition of ‘struct ifmap’
In file included from /usr/include/linux/netdevice.h:28:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from main.c:1:
/usr/include/linux/if.h:142:8: note: originally defined here
In file included from mitm.h:14:0,
from main.c:1:
/usr/include/net/if.h:126:8: error: redefinition of ‘struct ifreq’
In file included from /usr/include/linux/netdevice.h:28:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from main.c:1:
/usr/include/linux/if.h:176:8: note: originally defined here
In file included from mitm.h:14:0,
from main.c:1:
/usr/include/net/if.h:176:8: error: redefinition of ‘struct ifconf’
In file included from /usr/include/linux/netdevice.h:28:0,
from /usr/include/linux/if_arp.h:26,
from mitm.h:10,
from main.c:1:
/usr/include/linux/if.h:225:8: note: originally defined here
codeblox@Lubuntu-pc:~/Programming/C/Network/MITM/src$
Code:
#ifndef _MITM_H
#define _MITM_H
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <errno.h>
#include <linux/if_arp.h>
#include <netinet/in.h>
#include <netpacket/packet.h>
#include <net/ethernet.h>
#include <net/if.h>
#include <sys/ioctl.h>
void get_args(int argc, char ** argv, char ** host_a_ipstr, char ** host_b_ipstr, char ** iface_name);
int create_raw(char * iface_name);
#endif
#include "mitm.h"
int create_raw(char * iface_name)
{
int raw;
struct ifreq req;
struct sockaddr_ll sll;
memcpy(req.ifr_name, iface_name, IFNAMSIZ);
if((raw = socket(AF_INET, SOCK_RAW, ETHERTYPE_ARP)) == -1)
{
fprintf(stderr, "socket: %s\n", strerror(errno));
exit(-1);
}
if(ioctl(raw, SIOGIFINDEX, &req) == -1)
{
fprintf(stderr, "ioctl: %s\n", strerror(errno));
exit(-1);
}
sll.sll_family = AF_PACKET;
sll.sll_protocol = htons(ETHERTYPE_ARP);
sll.sll_ifindex = req.ifr_ifindex;
if(bind(raw, (struct sockaddr *)&sll, sizeof(sll)) == -1)
{
fprintf(stderr, "bind: %s\n", strerror(errno));
exit(-1);
}
return raw;
}
#include "mitm.h"
void get_args(int argc, char ** argv, char ** host_a_ipstr, char ** host_b_ipstr, char ** iface_name)
{
int opt;
if(argc == 7)
{
while((opt = getopt(argc, argv, "abi")) > 0)
{
switch(opt)
{
case 'a':
* host_a_ipstr = argv[optind];
break;
case 'b':
* host_b_ipstr = argv[optind];
break;
case 'i':
* iface_name = argv[optind];
break;
default:
break;
}
}
}
else
{
fprintf(stderr, "Usage: %s -a [ipaddr] -b [ipaddr] -i [iface]\n", argv[0]);
exit(-1);
}
}
#include "mitm.h"
int main(int argc, char ** argv)
{
char * host_a_ipstr, * host_b_ipstr, * iface_name;
int raw_sock;
get_args(argc, argv, &host_a_ipstr, &host_b_ipstr, &iface_name);
raw_sock = create_raw(iface_name);
return 0;
}