Пример #1
0
char *new_packet(int proto, int option, int *size)
{
    char *packet = NULL;
    int packet_size = 0;
    char padding_offset = 0;
    int padding_len = 0;

    switch (proto) {
    case IPPROTO_TCP:
        packet_size = sizeof(struct iphdr) + sizeof(struct tcphdr);
        break;
    case IPPROTO_UDP:
        packet_size = sizeof(struct iphdr) + sizeof(struct udphdr);
        break;
    case IPPROTO_ICMP:
        packet_size = sizeof(struct iphdr) + sizeof(struct icmphdr);
        break;
    default:
        warn("this protocal is unsupported");
        *size = 0;
        return NULL;
    }
    if (option & PACK_PADDING) {
        padding_len = get_rand_int(MAX_PADDING_LEN);
        padding_len = padding_len - padding_len % (sizeof(int));
        padding_offset = packet_size;
        packet_size += padding_len;
    }
    packet = safe_malloc(packet_size);
    if (option & PACK_PADDING) {
        fill_buf_rand(packet + padding_offset, padding_len);
    }
    *size = packet_size;
    return packet;
}
Пример #2
0
int find_min_cut(int **adj_list, int *lengths, int adj_list_len)
{
  int nodes_num = adj_list_len;
  while(nodes_num > 2)
  {
    int node_1, node_2;
    do
    {
      node_1 = get_rand_int(adj_list_len);
    }
    while(lengths[node_1] == 0);    
    node_2 = adj_list[node_1][ get_rand_int(lengths[node_1]) ];  
    
    merge_nodes(adj_list, lengths, adj_list_len, node_1, node_2);
    --nodes_num;
  }  

  /* find cut */
  int i;
  for(i = 0; lengths[i] == 0; ++i)
    ;
  return lengths[i];
}
Пример #3
0
/*get non-negative integer values with a given sum*/
std::vector<double> get_rand_int_with_sum(int num, int sum)
{
    std::vector<double> result(num,0);
    int t_sum = sum;
    for(int i = 0; i < num; i++){
        int value = get_rand_int(0, t_sum);
        t_sum -= value;
        if(t_sum >= 0)
            result[i] = value;
        else
            break;
    }
    return result;
}