static void pppox_PX_PROTO_OL2TP_PPPoL2TPv3in6(struct sockaddr **addr, socklen_t *addrlen) { #ifdef USE_PPPOL2TPIN6 struct sockaddr_pppol2tpv3in6 *pppol2tpv3in6; pppol2tpv3in6 = zmalloc(sizeof(struct sockaddr_pppol2tpv3in6)); pppol2tpv3in6->sa_family = PF_PPPOX; pppol2tpv3in6->sa_protocol = rnd() % 3; pppol2tpv3in6->pppol2tp.pid = get_pid(); pppol2tpv3in6->pppol2tp.fd = get_random_fd(); pppol2tpv3in6->pppol2tp.s_tunnel = rnd(); pppol2tpv3in6->pppol2tp.s_session = rnd(); pppol2tpv3in6->pppol2tp.d_tunnel = rnd(); pppol2tpv3in6->pppol2tp.d_session = rnd(); pppol2tpv3in6->pppol2tp.addr.sin6_family = AF_INET6; pppol2tpv3in6->pppol2tp.addr.sin6_port = rnd(); pppol2tpv3in6->pppol2tp.addr.sin6_flowinfo = rnd(); pppol2tpv3in6->pppol2tp.addr.sin6_addr.s6_addr32[0] = 0; pppol2tpv3in6->pppol2tp.addr.sin6_addr.s6_addr32[1] = 0; pppol2tpv3in6->pppol2tp.addr.sin6_addr.s6_addr32[2] = 0; pppol2tpv3in6->pppol2tp.addr.sin6_addr.s6_addr32[3] = random_ipv4_address(); pppol2tpv3in6->pppol2tp.addr.sin6_scope_id = rnd(); *addr = (struct sockaddr *) pppol2tpv3in6; *addrlen = sizeof(struct sockaddr_pppol2tpv3in6); #endif }
static void ipv4_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen) { struct sockaddr_in *ipv4; struct in_addr serv_addr; ipv4 = zmalloc(sizeof(struct sockaddr_in)); ipv4->sin_family = PF_INET; ipv4->sin_addr.s_addr = random_ipv4_address(); ipv4->sin_port = htons(rnd() % 65535); /* Client side if we supplied server_addr */ if (inet_pton(PF_INET, server_addr, &serv_addr) == 1) ipv4->sin_addr = serv_addr; /* Server side if we supplied port without addr, so listen on INADDR_ANY */ else if (server_port != 0) ipv4->sin_addr.s_addr = htonl(INADDR_ANY); /* Fuzz from port to (port + 100) if supplied */ if (server_port != 0) ipv4->sin_port = htons(server_port + rnd() % 100); *addr = (struct sockaddr *) ipv4; *addrlen = sizeof(struct sockaddr_in); }
void ipv4_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen) { struct sockaddr_in *ipv4; ipv4 = zmalloc(sizeof(struct sockaddr_in)); ipv4->sin_family = PF_INET; ipv4->sin_addr.s_addr = random_ipv4_address(); ipv4->sin_port = htons(rand() % 65535); *addr = (struct sockaddr *) ipv4; *addrlen = sizeof(struct sockaddr_in); }
static void rds_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen) { struct sockaddr_in *rds; rds = zmalloc(sizeof(struct sockaddr_in)); rds->sin_family = AF_INET; rds->sin_addr.s_addr = random_ipv4_address(); rds->sin_port = rnd() % 65535; *addr = (struct sockaddr *) rds; *addrlen = sizeof(struct sockaddr_in); }
void ipv4_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen) { struct sockaddr_in *ipv4; ipv4 = malloc(sizeof(struct sockaddr_in)); if (ipv4 == NULL) return; ipv4->sin_family = PF_INET; ipv4->sin_addr.s_addr = random_ipv4_address(); ipv4->sin_port = rand() % 65535; *addr = (struct sockaddr *) ipv4; *addrlen = sizeof(struct sockaddr_in); }
static void pppox_PX_PROTO_OL2TP_PPPoL2TP(struct sockaddr **addr, socklen_t *addrlen) { struct sockaddr_pppol2tp *pppol2tp; pppol2tp = zmalloc(sizeof(struct sockaddr_pppol2tp)); pppol2tp->sa_family = PF_PPPOX; pppol2tp->sa_protocol = rnd() % 3; pppol2tp->pppol2tp.pid = get_pid(); pppol2tp->pppol2tp.fd = get_random_fd(); pppol2tp->pppol2tp.addr.sin_addr.s_addr = random_ipv4_address(); pppol2tp->pppol2tp.s_tunnel = rnd(); pppol2tp->pppol2tp.s_session = rnd(); pppol2tp->pppol2tp.d_tunnel = rnd(); pppol2tp->pppol2tp.d_session = rnd(); *addr = (struct sockaddr *) pppol2tp; *addrlen = sizeof(struct sockaddr_pppol2tp); }
static void gen_random_ipv6_address(struct in6_addr *v6) { const char *p; /* 90% of the time, just do localhost */ if (!(ONE_IN(10))) { inet_pton(AF_INET6, "::1", v6); return; } if (RAND_BOOL()) { /* v4 in v6 somehow. */ in_addr_t v4; const struct addrtext v4_in_v6_addresses[] = { { "::" }, /* deprecated ipv4 style ::v4 */ { "::ffff:0:0" }, /* v4 in v6 ::ffff:0:0/96 */ { "::ffff:0:0:0" }, /* stateless IP/ICMP translation (SIIT) ::ffff:0:0:0/96 */ { "2002::" }, /* 2002::/16 "6to4" */ }; p = RAND_ELEMENT(v4_in_v6_addresses, name); inet_pton(AF_INET6, p, v6); v4 = random_ipv4_address(); v6->s6_addr32[3] = htonl(v4); } else { /* actual v6 addresses. */ const struct addrtext v6_addresses[] = { { "::" }, /* ::/128 unspecified */ { "fe80::" }, /* fe80::/10 link-local */ { "fc00::" }, /* fc00::/7 unique local address (ULA) */ { "64:ff9b::" }, /* 64:ff9b::/96 "Well known" prefix */ { "0100::" }, /* 0100::/64 remotely triggered blackhole */ }; p = RAND_ELEMENT(v6_addresses, name); inet_pton(AF_INET6, p, v6); } }
static void pppox_PX_PROTO_OL2TP_PPPoL2TPv3(struct sockaddr **addr, socklen_t *addrlen) { #ifdef USE_PPPOL2TPV3 struct sockaddr_pppol2tpv3 *pppol2tpv3; pppol2tpv3 = zmalloc(sizeof(struct sockaddr_pppol2tpv3)); pppol2tpv3->sa_family = PF_PPPOX; pppol2tpv3->sa_protocol = rnd() % 3; pppol2tpv3->pppol2tp.pid = get_pid(); pppol2tpv3->pppol2tp.fd = get_random_fd(); pppol2tpv3->pppol2tp.addr.sin_addr.s_addr = random_ipv4_address(); pppol2tpv3->pppol2tp.s_tunnel = rnd(); pppol2tpv3->pppol2tp.s_session = rnd(); pppol2tpv3->pppol2tp.d_tunnel = rnd(); pppol2tpv3->pppol2tp.d_session = rnd(); *addr = (struct sockaddr *) pppol2tpv3; *addrlen = sizeof(struct sockaddr_pppol2tpv3); #endif }
static void pppox_PX_PROTO_OE(struct sockaddr **addr, socklen_t *addrlen) { struct sockaddr_pppox *pppox; unsigned int i; pppox = zmalloc(sizeof(struct sockaddr_pppox)); pppox->sa_family = PF_PPPOX; pppox->sa_protocol = rnd() % 3; pppox->sa_addr.pppoe.sid = rnd(); for (i = 0; i < ETH_ALEN; i++) pppox->sa_addr.pppoe.remote[i] = rnd(); for (i = 0; i < IFNAMSIZ; i++) pppox->sa_addr.pppoe.dev[i] = rnd(); #ifdef USE_PPPOX_PPTP pppox->sa_addr.pptp.call_id = rnd(); pppox->sa_addr.pptp.sin_addr.s_addr = random_ipv4_address(); #endif *addr = (struct sockaddr *) pppox; *addrlen = sizeof(struct sockaddr_pppox); }
void ip_setsockopt(struct sockopt *so) { unsigned char val; struct ip_mreqn *mr; struct ip_mreq_source *ms; int mcaddr; so->level = SOL_IP; val = rand() % NR_SOL_IP_OPTS; so->optname = ip_opts[val]; switch (ip_opts[val]) { case IP_PKTINFO: case IP_RECVTTL: case IP_RECVOPTS: case IP_RECVTOS: case IP_RETOPTS: case IP_TOS: case IP_TTL: case IP_HDRINCL: case IP_MTU_DISCOVER: case IP_RECVERR: case IP_ROUTER_ALERT: case IP_FREEBIND: case IP_PASSSEC: case IP_TRANSPARENT: case IP_MINTTL: case IP_NODEFRAG: case IP_UNICAST_IF: case IP_MULTICAST_TTL: case IP_MULTICAST_ALL: case IP_MULTICAST_LOOP: case IP_RECVORIGDSTADDR: if (rand_bool()) so->optlen = sizeof(int); else so->optlen = sizeof(char); break; case IP_OPTIONS: so->optlen = rand() % 40; break; case IP_MULTICAST_IF: case IP_ADD_MEMBERSHIP: case IP_DROP_MEMBERSHIP: mcaddr = 0xe0000000 | rand() % 0xff; mr = zmalloc(sizeof(struct ip_mreqn)); mr->imr_multiaddr.s_addr = mcaddr; mr->imr_address.s_addr = random_ipv4_address(); mr->imr_ifindex = rand32(); so->optval = (unsigned long) mr; so->optlen = sizeof(struct ip_mreqn); break; case MRT_ADD_VIF: case MRT_DEL_VIF: so->optlen = sizeof(struct vifctl); break; case MRT_ADD_MFC: case MRT_ADD_MFC_PROXY: case MRT_DEL_MFC: case MRT_DEL_MFC_PROXY: so->optlen = sizeof(struct mfcctl); break; case MRT_TABLE: so->optlen = sizeof(__u32); break; case IP_MSFILTER: //FIXME: Read size from sysctl /proc/sys/net/core/optmem_max so->optlen = rand() % sizeof(unsigned long)*(2*UIO_MAXIOV+512); so->optlen |= IP_MSFILTER_SIZE(0); break; case IP_BLOCK_SOURCE: case IP_UNBLOCK_SOURCE: case IP_ADD_SOURCE_MEMBERSHIP: case IP_DROP_SOURCE_MEMBERSHIP: mcaddr = 0xe0000000 | rand() % 0xff; ms = zmalloc(sizeof(struct ip_mreq_source)); ms->imr_multiaddr.s_addr = mcaddr; ms->imr_interface.s_addr = random_ipv4_address(); ms->imr_sourceaddr.s_addr = random_ipv4_address(); so->optval = (unsigned long) ms; so->optlen = sizeof(struct ip_mreq_source); break; case MCAST_JOIN_GROUP: case MCAST_LEAVE_GROUP: so->optlen = sizeof(struct group_req); break; case MCAST_JOIN_SOURCE_GROUP: case MCAST_LEAVE_SOURCE_GROUP: case MCAST_BLOCK_SOURCE: case MCAST_UNBLOCK_SOURCE: so->optlen = sizeof(struct group_source_req); break; case MCAST_MSFILTER: //FIXME: Read size from sysctl /proc/sys/net/core/optmem_max so->optlen = rand() % sizeof(unsigned long)*(2*UIO_MAXIOV+512); so->optlen |= GROUP_FILTER_SIZE(0); break; default: break; } }