Exemplo n.º 1
0
echo_request_t prepare_echo_request(unsigned short identifier, unsigned char *local_ip, unsigned char *local_mac, unsigned char *dest_ip, unsigned char *dest_mac) {
  char *buffer = calloc(sizeof(char), BUFFER_LEN);
  char *bufferptr = buffer;

  // Prepare packet data as needed
  bufferptr = write_ethernet(bufferptr, dest_mac, local_mac);
  bufferptr = write_ipv4(bufferptr, identifier + sequence_number, local_ip, dest_ip);
  bufferptr = write_icmp(bufferptr, identifier);

  echo_request_t req = {
    .identifier      = identifier,
    .sequence_number = sequence_number++,
    .local_mac       = local_mac,
    .local_ip        = local_ip,
    .raw_packet      = buffer
  };

  return req;
}

// Write the ethernet headers
char *write_ethernet(char *bufferptr, unsigned char *dest_mac, unsigned char *local_mac) {
  memcpy(bufferptr, dest_mac, MAC_ADDR_LEN);
  bufferptr += MAC_ADDR_LEN;

  memcpy(bufferptr, local_mac, MAC_ADDR_LEN);
  bufferptr += MAC_ADDR_LEN;

  short int etherTypeT = htons(0x0800);
  memcpy(bufferptr, &(etherTypeT), sizeof(etherTypeT));

  return bufferptr + ETHERTYPE_LEN;
}
Exemplo n.º 2
0
int write_token_ip_entry(FILE* h_token2ip, const char* token, uint8_t* ip) {

    if (!write_string(h_token2ip, token))
        return 0;

    if (!write_ipv4(h_token2ip, ip))
        return 0;

    return 1;
}