mirror of
https://code.semirocket.science/wrapsix
synced 2024-11-22 09:01:55 +02:00
Ethernet stuff moved to separated header file
Reworked IP addresses translation functions Centralized initializing of random number generator
This commit is contained in:
parent
e0015145e2
commit
214c42728b
34
src/ethernet.h
Normal file
34
src/ethernet.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* WrapSix
|
||||||
|
* Copyright (C) 2008-2011 Michal Zima <xhire@mujmalysvet.cz>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ETHERNET_H
|
||||||
|
#define ETHERNET_H
|
||||||
|
|
||||||
|
/* MAC address structure */
|
||||||
|
struct s_mac_addr {
|
||||||
|
unsigned char addr[6];
|
||||||
|
} __attribute__ ((__packed__));
|
||||||
|
|
||||||
|
/* Ethernet header structure */
|
||||||
|
struct s_ethernet {
|
||||||
|
struct s_mac_addr dest; /* 48 b; destination host (MAC) address */
|
||||||
|
struct s_mac_addr src; /* 48 b; source host (MAC) address */
|
||||||
|
unsigned short type; /* 16 b; IP/ARP/RARP/... */
|
||||||
|
} __attribute__ ((__packed__));
|
||||||
|
|
||||||
|
#endif /* ETHERNET_H */
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* WrapSix
|
* WrapSix
|
||||||
* Copyright (C) 2008-2010 Michal Zima <xhire@mujmalysvet.cz>
|
* Copyright (C) 2008-2011 Michal Zima <xhire@mujmalysvet.cz>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Affero General Public License as
|
* it under the terms of the GNU Affero General Public License as
|
||||||
@ -19,6 +19,8 @@
|
|||||||
#ifndef IPV6_H
|
#ifndef IPV6_H
|
||||||
#define IPV6_H
|
#define IPV6_H
|
||||||
|
|
||||||
|
#include "ethernet.h" /* s_ethernet */
|
||||||
|
|
||||||
/* IPv6 address structure */
|
/* IPv6 address structure */
|
||||||
struct s_ipv6_addr {
|
struct s_ipv6_addr {
|
||||||
unsigned char addr[16];
|
unsigned char addr[16];
|
||||||
@ -36,6 +38,6 @@ struct s_ipv6 {
|
|||||||
struct s_ipv6_addr ip_dest; /* 128 b; destination address */
|
struct s_ipv6_addr ip_dest; /* 128 b; destination address */
|
||||||
} __attribute__ ((__packed__));
|
} __attribute__ ((__packed__));
|
||||||
|
|
||||||
int ipv6(struct s_ethernet *eth, char *payload);
|
int ipv6(struct s_ethernet *eth, char *packet);
|
||||||
|
|
||||||
#endif /* IPV6_H */
|
#endif /* IPV6_H */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* WrapSix
|
* WrapSix
|
||||||
* Copyright (C) 2008-2010 Michal Zima <xhire@mujmalysvet.cz>
|
* Copyright (C) 2008-2011 Michal Zima <xhire@mujmalysvet.cz>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Affero General Public License as
|
* it under the terms of the GNU Affero General Public License as
|
||||||
@ -89,7 +89,6 @@ struct s_nat *nat_out(radixtree_t *nat_proto6, radixtree_t *nat_proto4,
|
|||||||
result->last_packet = time(NULL);
|
result->last_packet = time(NULL);
|
||||||
|
|
||||||
/* generate some outgoing port */
|
/* generate some outgoing port */
|
||||||
srand((unsigned int) time(NULL));
|
|
||||||
do {
|
do {
|
||||||
/* return port from range 1024 - 65535 */
|
/* return port from range 1024 - 65535 */
|
||||||
connection->ipv4_port_src = (rand() % 64511) + 1024;
|
connection->ipv4_port_src = (rand() % 64511) + 1024;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* WrapSix
|
* WrapSix
|
||||||
* Copyright (C) 2008-2010 Michal Zima <xhire@mujmalysvet.cz>
|
* Copyright (C) 2008-2011 Michal Zima <xhire@mujmalysvet.cz>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Affero General Public License as
|
* it under the terms of the GNU Affero General Public License as
|
||||||
@ -23,10 +23,13 @@
|
|||||||
#include <netinet/in.h> /* htons */
|
#include <netinet/in.h> /* htons */
|
||||||
#include <net/ethernet.h> /* ETHERTYPE_* */
|
#include <net/ethernet.h> /* ETHERTYPE_* */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h> /* srand */
|
||||||
#include <string.h> /* strncpy */
|
#include <string.h> /* strncpy */
|
||||||
#include <sys/ioctl.h> /* ioctl, SIOCGIFINDEX */
|
#include <sys/ioctl.h> /* ioctl, SIOCGIFINDEX */
|
||||||
|
#include <time.h> /* time */
|
||||||
#include <unistd.h> /* close */
|
#include <unistd.h> /* close */
|
||||||
|
|
||||||
|
#include "ethernet.h"
|
||||||
#include "ipv4.h"
|
#include "ipv4.h"
|
||||||
#include "ipv6.h"
|
#include "ipv6.h"
|
||||||
#include "nat.h"
|
#include "nat.h"
|
||||||
@ -85,6 +88,9 @@ int main(int argc, char **argv)
|
|||||||
/* initiate NAT tables */
|
/* initiate NAT tables */
|
||||||
nat_init();
|
nat_init();
|
||||||
|
|
||||||
|
/* initiate random numbers generator */
|
||||||
|
srand((unsigned int) time(NULL));
|
||||||
|
|
||||||
/* sniff! :c) */
|
/* sniff! :c) */
|
||||||
for (;;) {
|
for (;;) {
|
||||||
addr_size = sizeof(addr);
|
addr_size = sizeof(addr);
|
||||||
@ -138,21 +144,13 @@ int process(char *packet)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct s_ipv4_addr ipv6_to_ipv4(struct s_ipv6_addr *ipv6_addr)
|
void ipv6_to_ipv4(struct s_ipv6_addr *ipv6_addr, struct s_ipv4_addr *ipv4_addr)
|
||||||
{
|
{
|
||||||
struct s_ipv4_addr ipv4_addr;
|
memcpy(ipv4_addr, &ipv6_addr + 12, 4);
|
||||||
|
|
||||||
memcpy(&ipv4_addr, &ipv6_addr + 12, 4);
|
|
||||||
|
|
||||||
return ipv4_addr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct s_ipv6_addr ipv4_to_ipv6(struct s_ipv4_addr *ipv4_addr)
|
void ipv4_to_ipv6(struct s_ipv4_addr *ipv4_addr, struct s_ipv6_addr *ipv6_addr)
|
||||||
{
|
{
|
||||||
struct s_ipv6_addr ipv6_addr;
|
*ipv6_addr = wrapsix_ipv6_prefix;
|
||||||
|
memcpy(ipv6_addr + 12, &ipv4_addr, 4);
|
||||||
ipv6_addr = wrapsix_ipv6_prefix;
|
|
||||||
memcpy(&ipv6_addr + 12, &ipv4_addr, 4);
|
|
||||||
|
|
||||||
return ipv6_addr;
|
|
||||||
}
|
}
|
||||||
|
@ -19,27 +19,13 @@
|
|||||||
#ifndef WRAPPER_H
|
#ifndef WRAPPER_H
|
||||||
#define WRAPPER_H
|
#define WRAPPER_H
|
||||||
|
|
||||||
/* MAC address structure */
|
#include "ipv4.h"
|
||||||
struct s_mac_addr {
|
#include "ipv6.h"
|
||||||
unsigned char a;
|
|
||||||
unsigned char b;
|
|
||||||
unsigned char c;
|
|
||||||
unsigned char d;
|
|
||||||
unsigned char e;
|
|
||||||
unsigned char f;
|
|
||||||
} __attribute__ ((__packed__));
|
|
||||||
|
|
||||||
/* Ethernet header structure */
|
|
||||||
struct s_ethernet {
|
|
||||||
struct s_mac_addr dest; /* 48 b; destination host (MAC) address */
|
|
||||||
struct s_mac_addr src; /* 48 b; source host (MAC) address */
|
|
||||||
unsigned short type; /* 16 b; IP/ARP/RARP/... */
|
|
||||||
} __attribute__ ((__packed__));
|
|
||||||
|
|
||||||
extern struct s_ipv6_addr ndp_multicast_addr;
|
extern struct s_ipv6_addr ndp_multicast_addr;
|
||||||
extern struct s_ipv6_addr wrapsix_ipv6_prefix;
|
extern struct s_ipv6_addr wrapsix_ipv6_prefix;
|
||||||
|
|
||||||
struct s_ipv4_addr ipv6_to_ipv4(struct s_ipv6_addr *ipv6_addr);
|
void ipv6_to_ipv4(struct s_ipv6_addr *ipv6_addr, struct s_ipv4_addr *ipv4_addr);
|
||||||
struct s_ipv6_addr ipv4_to_ipv6(struct s_ipv4_addr *ipv4_addr);
|
void ipv4_to_ipv6(struct s_ipv4_addr *ipv4_addr, struct s_ipv6_addr *ipv6_addr);
|
||||||
|
|
||||||
#endif /* WRAPPER_H */
|
#endif /* WRAPPER_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user