NETWORK ATTACKS FRAMEWORK
1.0.0
A NETwork Attacks framework. Making network attacks impact evaluation easier!
|
Go to the source code of this file.
Functions | |
void | nl_init (void) |
void | nl_cleanup (void) |
int | nl_send_add_route_msg (struct in_addr dest, struct in_addr next_hop, int metric, u_int32_t lifetime, int rt_flags, int ifindex) |
int | nl_send_del_route_msg (struct in_addr dest, struct in_addr next_hop, int metric) |
int | nl_send_no_route_found_msg (struct in_addr dest) |
int | nl_send_conf_msg (void) |
void nl_cleanup | ( | void | ) |
void nl_init | ( | void | ) |
Definition at line 73 of file NA_nl.c.
{ int status; unsigned int addrlen; memset(&peer, 0, sizeof(struct sockaddr_nl)); peer.nl_family = AF_NETLINK; peer.nl_pid = 0; peer.nl_groups = 0; memset(&aodvnl, 0, sizeof(struct nlsock)); aodvnl.seq = 0; aodvnl.local.nl_family = AF_NETLINK; aodvnl.local.nl_groups = AODVGRP_NOTIFY; aodvnl.local.nl_pid = getpid(); /* This is the AODV specific socket to communicate with the AODV kernel module */ aodvnl.sock = socket(PF_NETLINK, SOCK_RAW, NETLINK_AODV); if (aodvnl.sock < 0) { perror("Unable to create AODV netlink socket"); exit(-1); } status = bind(aodvnl.sock, (struct sockaddr *) &aodvnl.local, sizeof(aodvnl.local)); if (status == -1) { perror("Bind for AODV netlink socket failed"); exit(-1); } addrlen = sizeof(aodvnl.local); if (getsockname (aodvnl.sock, (struct sockaddr *) &aodvnl.local, &addrlen) < 0) { perror("Getsockname failed "); exit(-1); } if (attach_callback_func(aodvnl.sock, nl_kaodv_callback) < 0) { alog(LOG_ERR, 0, __FUNCTION__, "Could not attach callback."); } /* This socket is the generic routing socket for adding and removing kernel routing table entries */ memset(&rtnl, 0, sizeof(struct nlsock)); rtnl.seq = 0; rtnl.local.nl_family = AF_NETLINK; rtnl.local.nl_groups = RTMGRP_NOTIFY | RTMGRP_IPV4_IFADDR | RTMGRP_IPV4_ROUTE; rtnl.local.nl_pid = getpid(); rtnl.sock = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (rtnl.sock < 0) { perror("Unable to create RT netlink socket"); exit(-1); } addrlen = sizeof(rtnl.local); status = bind(rtnl.sock, (struct sockaddr *) &rtnl.local, addrlen); if (status == -1) { perror("Bind for RT netlink socket failed"); exit(-1); } if (getsockname(rtnl.sock, (struct sockaddr *) &rtnl.local, &addrlen) < 0) { perror("Getsockname failed "); exit(-1); } if (attach_callback_func(rtnl.sock, nl_rt_callback) < 0) { alog(LOG_ERR, 0, __FUNCTION__, "Could not attach callback."); } }
int nl_send_add_route_msg | ( | struct in_addr | dest, |
struct in_addr | next_hop, | ||
int | metric, | ||
u_int32_t | lifetime, | ||
int | rt_flags, | ||
int | ifindex | ||
) |
Definition at line 489 of file NA_nl.c.
{ struct { struct nlmsghdr n; struct kaodv_rt_msg m; } areq; DEBUG(LOG_DEBUG, 0, "ADD/UPDATE: %s:%s ifindex=%d", ip_to_str(dest), ip_to_str(next_hop), ifindex); memset(&areq, 0, sizeof(areq)); areq.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct kaodv_rt_msg)); areq.n.nlmsg_type = KAODVM_ADDROUTE; areq.n.nlmsg_flags = NLM_F_REQUEST; areq.m.dst = dest.s_addr; areq.m.nhop = next_hop.s_addr; areq.m.time = lifetime; areq.m.ifindex = ifindex; if (rt_flags & RT_INET_DEST) { areq.m.flags |= KAODV_RT_GW_ENCAP; } if (rt_flags & RT_REPAIR) areq.m.flags |= KAODV_RT_REPAIR; if (nl_send(&aodvnl, &areq.n) < 0) { DEBUG(LOG_DEBUG, 0, "Failed to send netlink message"); return -1; } #ifdef DEBUG_NETLINK DEBUG(LOG_DEBUG, 0, "Sending add route"); #endif return nl_kern_route(RTM_NEWROUTE, NLM_F_CREATE, AF_INET, ifindex, &dest, &next_hop, NULL, metric); }
int nl_send_conf_msg | ( | void | ) |
Definition at line 583 of file NA_nl.c.
{ struct { struct nlmsghdr n; kaodv_conf_msg_t cm; } areq; memset(&areq, 0, sizeof(areq)); areq.n.nlmsg_len = NLMSG_LENGTH(sizeof(kaodv_conf_msg_t)); areq.n.nlmsg_type = KAODVM_CONFIG; areq.n.nlmsg_flags = NLM_F_REQUEST; areq.cm.qual_th = qual_threshold; areq.cm.active_route_timeout = active_route_timeout; areq.cm.is_gateway = internet_gw_mode; #ifdef DEBUG_NETLINK DEBUG(LOG_DEBUG, 0, "Sending aodv conf msg"); #endif return nl_send(&aodvnl, &areq.n); }
int nl_send_del_route_msg | ( | struct in_addr | dest, |
struct in_addr | next_hop, | ||
int | metric | ||
) |
Definition at line 551 of file NA_nl.c.
{ int index = -1; struct { struct nlmsghdr n; struct kaodv_rt_msg m; } areq; DEBUG(LOG_DEBUG, 0, "Send DEL_ROUTE to kernel: %s", ip_to_str(dest)); memset(&areq, 0, sizeof(areq)); areq.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct kaodv_rt_msg)); areq.n.nlmsg_type = KAODVM_DELROUTE; areq.n.nlmsg_flags = NLM_F_REQUEST; areq.m.dst = dest.s_addr; areq.m.nhop = next_hop.s_addr; areq.m.time = 0; areq.m.flags = 0; if (nl_send(&aodvnl, &areq.n) < 0) { DEBUG(LOG_DEBUG, 0, "Failed to send netlink message"); return -1; } #ifdef DEBUG_NETLINK DEBUG(LOG_DEBUG, 0, "Sending del route"); #endif return nl_kern_route(RTM_DELROUTE, 0, AF_INET, index, &dest, &next_hop, NULL, metric); }
int nl_send_no_route_found_msg | ( | struct in_addr | dest | ) |
Definition at line 530 of file NA_nl.c.
{ struct { struct nlmsghdr n; kaodv_rt_msg_t m; } areq; memset(&areq, 0, sizeof(areq)); areq.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct kaodv_rt_msg)); areq.n.nlmsg_type = KAODVM_NOROUTE_FOUND; areq.n.nlmsg_flags = NLM_F_REQUEST; areq.m.dst = dest.s_addr; DEBUG(LOG_DEBUG, 0, "Send NOROUTE_FOUND to kernel: %s", ip_to_str(dest)); return nl_send(&aodvnl, &areq.n); }