NF_SRV_RULE¶
A rule defines the required action for network activity, described by other rule fields.
typedef enum _NF_SRV_DIRECTION
{
NF_SRV_D_SRC_TO_DST = 0, // Packets directed from source to destination
NF_SRV_D_BOTH = 1 // Both directions
} NF_SRV_DIRECTION;
typedef enum _NF_SRV_FILTERING_FLAG
{
NF_SRV_ALLOW = 0, // Allow the activity
NF_SRV_BLOCK = 1, // Block the activity
NF_SRV_FILTER = 2, // Filter the transmitted packets
} NF_SRV_FILTERING_FLAG;
typedef struct _NF_SRV_PORT_RANGE
{
unsigned short valueLow;
unsigned short valueHigh;
} NF_SRV_PORT_RANGE, *PNF_SRV_PORT_RANGE;
typedef struct _NF_IP_ADDRESS
{
union
{
DWORD v4;
UCHAR v6[16];
};
} NF_IP_ADDRESS, *PNF_IP_ADDRESS;
typedef struct _NF_ADDRESS
{
unsigned char ipFamily;
unsigned short port;
NF_IP_ADDRESS ip;
} NF_ADDRESS, *PNF_ADDRESS;
typedef struct _NF_SRV_RULE_ACTION
{
NF_ADDRESS tcpRedirectTo; // Local address for redirecting TCP when NF_SRV_FILTER flag is set in filteringFlag
NF_ADDRESS udpRedirectTo; // Local address for redirecting UDP when NF_SRV_FILTER flag is set in filteringFlag
unsigned int fcHandle; // Flow control context
unsigned long filteringFlag; // See NF_SRV_FILTERING_FLAG
} NF_SRV_RULE_ACTION, *PNF_SRV_RULE_ACTION;
#ifndef NF_MAX_IP_ADDRESS_LENGTH
#define NF_MAX_IP_ADDRESS_LENGTH 16
#endif
typedef struct _NF_SRV_RULE
{
unsigned short ip_family; // AF_INET for IPv4 and AF_INET6 for IPv6
int protocol; // IPPROTO_TCP, IPPROTO_UDP, ...
unsigned long long interfaceLuid; // Luid of the network interface
// NF_D_SRC_TO_DST - apply the rule to traffic directed from source to destination
// NF_D_BOTH - apply the rule to all traffic between
// the specified destination and source IP addresses and ports
NF_SRV_DIRECTION direction;
NF_SRV_PORT_RANGE srcPort; // Source port(s)
NF_SRV_PORT_RANGE dstPort; // Destination port(s)
// Source IP (or network if srcIpAddressMask is not zero)
unsigned char srcIpAddress[NF_MAX_IP_ADDRESS_LENGTH];
// Source IP mask
unsigned char srcIpAddressMask[NF_MAX_IP_ADDRESS_LENGTH];
// Destination IP (or network if remoteIpAddressMask is not zero)
unsigned char dstIpAddress[NF_MAX_IP_ADDRESS_LENGTH];
// Destination IP mask
unsigned char dstIpAddressMask[NF_MAX_IP_ADDRESS_LENGTH];
NF_SRV_RULE_ACTION action; // Rule action fields
} NF_SRV_RULE, *PNF_SRV_RULE;
NF_SRV_RULE¶
- ip_family
Describes the family of IP addresses in rule. Specify AF_INET for IPv4 and AF_INET6 for IPv6. If ip_family is zero, the driver doesn’t use the IP addresses specified in a rule.
- protocol
Network protocol (IPPROTO_TCP, IPPROTO_UDP, IPPROTO_ICMP etc.). Zero means any protocol.
- interfaceLuid
Identifier of a network interface for applying the rule.
- direction
The direction of network activity. The default value NF_SRV_D_SRC_TO_DST instructs to apply the IP and port conditions as-is for source and destination IP and port. NF_SRV_D_BOTH makes the driver to apply the IP and port conditions also to backward traffic. It allows to avoid using an additional rule with swapped source and destination conditions when it is necessary to bypass or block the traffic in both directions.
- srcPort
Source port range (the ports are in host order).
- dstPort
Destination port range (the ports are in host order).
- srcIpAddress
Source IPv4 or IPv6 address. Zero means any address.
- srcIpAddressMask
If srcIpAddressMask is not zero, the rule is applied to network activity with a source address from the network srcIpAddress & srcIpAddressMask.
- dstIpAddress
Destination IPv4 or IPv6 address. Zero means any address.
- dstIpAddressMask
If dstIpAddressMask is not zero, the rule is applied to network activity with a destination address from the network dstIpAddress & dstIpAddressMask.
- action
NF_SRV_RULE_ACTION structure specifying the required rule actions.
NF_SRV_RULE_ACTION¶
- tcpRedirectTo
Specifies IP and port of a local proxy for redirection of filtered TCP connections. Zeros means that the library must assign the IP and port of internal TCP proxy.
- udpRedirectTo
Specifies IP and port of a local proxy for redirection of filtered UDP packets. Zeros means that the library must assign the IP and port of internal UDP proxy.
- fcHandle
Flow control handle for the suitable network activity. Zero means no handle.
- filteringFlag
- NF_SRV_ALLOW = 0
Allow the activity without filtering transmitted packets. This flag is applied to all network activity, which is not described by any rule.
- NF_SRV_BLOCK = 1
Block the activity.
- NF_SRV_FILTER = 2
Filter the transmitted packets by redirecting them to local proxies.
The IP addresses in rule must have network byte order. The port ranges are in host byte order. Zero in rule field means that it’s value is undefined, and the field should be ignored.