2023-01-10 16:30:34 +08:00
|
|
|
#include <stdio.h>
|
2023-01-11 11:21:55 +08:00
|
|
|
#include <string.h>
|
2023-01-10 16:30:34 +08:00
|
|
|
#include <arpa/inet.h>
|
|
|
|
|
|
2023-01-11 11:21:55 +08:00
|
|
|
#include "addr_tuple4.h"
|
2023-01-10 16:30:34 +08:00
|
|
|
|
2023-01-11 11:21:55 +08:00
|
|
|
char *addr_tuple4_to_str(const struct addr_tuple4 *addr)
|
2023-01-10 16:30:34 +08:00
|
|
|
{
|
|
|
|
|
char *str_ret = NULL;
|
|
|
|
|
|
2023-01-11 11:21:55 +08:00
|
|
|
if (addr->addr_type == ADDR_TUPLE4_TYPE_V4)
|
2023-01-10 16:30:34 +08:00
|
|
|
{
|
|
|
|
|
char src_addr[INET_ADDRSTRLEN] = {0};
|
|
|
|
|
char dst_addr[INET_ADDRSTRLEN] = {0};
|
|
|
|
|
uint16_t src_port = ntohs((uint16_t)addr->addr_v4.src_port);
|
|
|
|
|
uint16_t dst_port = ntohs((uint16_t)addr->addr_v4.dst_port);
|
|
|
|
|
inet_ntop(AF_INET, &addr->addr_v4.src_addr, src_addr, sizeof(src_addr));
|
|
|
|
|
inet_ntop(AF_INET, &addr->addr_v4.dst_addr, dst_addr, sizeof(dst_addr));
|
|
|
|
|
asprintf(&str_ret, "%s %u %s %u", src_addr, src_port, dst_addr, dst_port);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-11 11:21:55 +08:00
|
|
|
if (addr->addr_type == ADDR_TUPLE4_TYPE_V6)
|
2023-01-10 16:30:34 +08:00
|
|
|
{
|
|
|
|
|
char src_addr[INET6_ADDRSTRLEN] = {0};
|
|
|
|
|
char dst_addr[INET6_ADDRSTRLEN] = {0};
|
|
|
|
|
uint16_t src_port = ntohs((uint16_t)addr->addr_v6.src_port);
|
|
|
|
|
uint16_t dst_port = ntohs((uint16_t)addr->addr_v6.dst_port);
|
|
|
|
|
inet_ntop(AF_INET6, &addr->addr_v6.src_addr, src_addr, sizeof(src_addr));
|
|
|
|
|
inet_ntop(AF_INET6, &addr->addr_v6.dst_addr, dst_addr, sizeof(dst_addr));
|
|
|
|
|
asprintf(&str_ret, "%s %u %s %u", src_addr, src_port, dst_addr, dst_port);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return str_ret;
|
2023-01-11 11:21:55 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void addr_tuple4_reverse(const struct addr_tuple4 *orin, struct addr_tuple4 *out)
|
|
|
|
|
{
|
|
|
|
|
memset(out, 0, sizeof(struct addr_tuple4));
|
|
|
|
|
|
|
|
|
|
if (orin->addr_type == ADDR_TUPLE4_TYPE_V4)
|
|
|
|
|
{
|
|
|
|
|
out->addr_type = ADDR_TUPLE4_TYPE_V4;
|
|
|
|
|
out->addr_v4.src_addr = orin->addr_v4.dst_addr;
|
|
|
|
|
out->addr_v4.dst_addr = orin->addr_v4.src_addr;
|
|
|
|
|
out->addr_v4.src_port = orin->addr_v4.dst_port;
|
|
|
|
|
out->addr_v4.dst_port = orin->addr_v4.src_port;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (orin->addr_type == ADDR_TUPLE4_TYPE_V6)
|
|
|
|
|
{
|
|
|
|
|
out->addr_type = ADDR_TUPLE4_TYPE_V6;
|
|
|
|
|
out->addr_v6.src_addr = orin->addr_v6.dst_addr;
|
|
|
|
|
out->addr_v6.dst_addr = orin->addr_v6.src_addr;
|
|
|
|
|
out->addr_v6.src_port = orin->addr_v6.dst_port;
|
|
|
|
|
out->addr_v6.dst_port = orin->addr_v6.src_port;
|
|
|
|
|
}
|
2023-01-10 16:30:34 +08:00
|
|
|
}
|