Functions | |
struct nfqnl_msg_packet_hdr * | nfq_get_msg_packet_hdr (struct nfq_data *nfad) |
uint32_t | nfq_get_nfmark (struct nfq_data *nfad) |
int | nfq_get_timestamp (struct nfq_data *nfad, struct timeval *tv) |
u_int32_t | nfq_get_indev (struct nfq_data *nfad) |
u_int32_t | nfq_get_physindev (struct nfq_data *nfad) |
u_int32_t | nfq_get_outdev (struct nfq_data *nfad) |
u_int32_t | nfq_get_physoutdev (struct nfq_data *nfad) |
int | nfq_get_indev_name (struct nlif_handle *nlif_handle, struct nfq_data *nfad, char *name) |
int | nfq_get_physindev_name (struct nlif_handle *nlif_handle, struct nfq_data *nfad, char *name) |
int | nfq_get_outdev_name (struct nlif_handle *nlif_handle, struct nfq_data *nfad, char *name) |
int | nfq_get_physoutdev_name (struct nlif_handle *nlif_handle, struct nfq_data *nfad, char *name) |
struct nfqnl_msg_packet_hw * | nfq_get_packet_hw (struct nfq_data *nfad) |
int | nfq_get_payload (struct nfq_data *nfad, unsigned char **data) |
u_int32_t nfq_get_indev | ( | struct nfq_data * | nfad | ) |
nfq_get_indev - get the interface that the packet was received through
nfad | Netlink packet data handle passed to callback function |
Definition at line 840 of file libnetfilter_queue.c.
int nfq_get_indev_name | ( | struct nlif_handle * | nlif_handle, | |
struct nfq_data * | nfad, | |||
char * | name | |||
) |
nfq_get_indev_name - get the name of the interface the packet was received through
nlif_handle | pointer to a nlif interface resolving handle | |
nfad | Netlink packet data handle passed to callback function | |
name | pointer to the buffer to receive the interface name; not more than IFNAMSIZ bytes will be copied to it. |
To use a nlif_handle, You need first to call nlif_open() and to open an handler. Don't forget to store the result as it will be used during all your program life:
h = nlif_open(); if (h == NULL) { perror("nlif_open"); exit(EXIT_FAILURE); }
Once the handler is open, you need to fetch the interface table at a whole via a call to nlif_query.
nlif_query(h);
libnfnetlink is able to update the interface mapping when a new interface appears. To do so, you need to call nlif_catch() on the handler after each interface related event. The simplest way to get and treat event is to run a select() or poll() against the nlif file descriptor. To get this file descriptor, you need to use nlif_fd:
if_fd = nlif_fd(h);
Don't forget to close the handler when you don't need the feature anymore:
nlif_close(h);
Definition at line 924 of file libnetfilter_queue.c.
struct nfqnl_msg_packet_hdr* nfq_get_msg_packet_hdr | ( | struct nfq_data * | nfad | ) | [read] |
nfqnl_msg_packet_hdr - return the metaheader that wraps the packet
nfad | Netlink packet data handle passed to callback function |
The nfqnl_msg_packet_hdr structure is defined in libnetfilter_queue.h as:
struct nfqnl_msg_packet_hdr { u_int32_t packet_id; // unique ID of packet in queue u_int16_t hw_protocol; // hw protocol (network order) u_int8_t hook; // netfilter hook } __attribute__ ((packed));
Definition at line 789 of file libnetfilter_queue.c.
uint32_t nfq_get_nfmark | ( | struct nfq_data * | nfad | ) |
nfq_get_nfmark - get the packet mark
nfad | Netlink packet data handle passed to callback function |
Definition at line 801 of file libnetfilter_queue.c.
u_int32_t nfq_get_outdev | ( | struct nfq_data * | nfad | ) |
nfq_get_outdev - gets the interface that the packet will be routed out
nfad | Netlink packet data handle passed to callback function |
Definition at line 866 of file libnetfilter_queue.c.
int nfq_get_outdev_name | ( | struct nlif_handle * | nlif_handle, | |
struct nfq_data * | nfad, | |||
char * | name | |||
) |
nfq_get_outdev_name - get the name of the physical interface the packet will be sent to
nlif_handle | pointer to a nlif interface resolving handle | |
nfad | Netlink packet data handle passed to callback function | |
name | pointer to the buffer to receive the interface name; not more than IFNAMSIZ bytes will be copied to it. |
See nfq_get_indev_name() documentation for nlif_handle usage.
Definition at line 962 of file libnetfilter_queue.c.
struct nfqnl_msg_packet_hw* nfq_get_packet_hw | ( | struct nfq_data * | nfad | ) | [read] |
nfq_get_packet_hw
get hardware address
nfad | Netlink packet data handle passed to callback function |
Retrieves the hardware address associated with the given queued packet. For ethernet packets, the hardware address returned (if any) will be the MAC address of the packet source host. The destination MAC address is not known until after POSTROUTING and a successful ARP request, so cannot currently be retrieved.
The nfqnl_msg_packet_hw structure is defined in libnetfilter_queue.h as:
struct nfqnl_msg_packet_hw { u_int16_t hw_addrlen; u_int16_t _pad; u_int8_t hw_addr[8]; } __attribute__ ((packed));
Definition at line 1011 of file libnetfilter_queue.c.
int nfq_get_payload | ( | struct nfq_data * | nfad, | |
unsigned char ** | data | |||
) |
nfq_get_payload - get payload
nfad | Netlink packet data handle passed to callback function | |
data | Pointer of pointer that will be pointed to the payload |
Retrieve the payload for a queued packet. The actual amount and type of data retrieved by this function will depend on the mode set with the nfq_set_mode() function.
Definition at line 1028 of file libnetfilter_queue.c.
u_int32_t nfq_get_physindev | ( | struct nfq_data * | nfad | ) |
nfq_get_physindev - get the physical interface that the packet was received
nfad | Netlink packet data handle passed to callback function |
Definition at line 853 of file libnetfilter_queue.c.
int nfq_get_physindev_name | ( | struct nlif_handle * | nlif_handle, | |
struct nfq_data * | nfad, | |||
char * | name | |||
) |
nfq_get_physindev_name - get the name of the physical interface the packet was received through
nlif_handle | pointer to a nlif interface resolving handle | |
nfad | Netlink packet data handle passed to callback function | |
name | pointer to the buffer to receive the interface name; not more than IFNAMSIZ bytes will be copied to it. |
See nfq_get_indev_name() documentation for nlif_handle usage.
Definition at line 943 of file libnetfilter_queue.c.
u_int32_t nfq_get_physoutdev | ( | struct nfq_data * | nfad | ) |
nfq_get_physoutdev - get the physical interface that the packet output
nfad | Netlink packet data handle passed to callback function |
The index of the physical device the queued packet will be sent out. If the returned index is 0, the packet is destined for localhost or the physical output interface is not yet known (ie. PREROUTING?).
Definition at line 881 of file libnetfilter_queue.c.
int nfq_get_physoutdev_name | ( | struct nlif_handle * | nlif_handle, | |
struct nfq_data * | nfad, | |||
char * | name | |||
) |
nfq_get_physoutdev_name - get the name of the interface the packet will be sent to
nlif_handle | pointer to a nlif interface resolving handle | |
nfad | Netlink packet data handle passed to callback function | |
name | pointer to the buffer to receive the interface name; not more than IFNAMSIZ bytes will be copied to it. |
See nfq_get_indev_name() documentation for nlif_handle usage.
Definition at line 982 of file libnetfilter_queue.c.
int nfq_get_timestamp | ( | struct nfq_data * | nfad, | |
struct timeval * | tv | |||
) |
nfq_get_timestamp - get the packet timestamp
nfad | Netlink packet data handle passed to callback function | |
tv | structure to fill with timestamp info |
Retrieves the received timestamp when the given queued packet.
Definition at line 815 of file libnetfilter_queue.c.