而在网络编程中,涉及到网络套接字的相关操作,如PF_INET协议族,用于IPv4网络通信。 PF_INET是常用的网络协议族之一,用于指定网络套接字的地址及协议类型。在Linux系统中,常用的网络编程接口为socket函数,其中的参数PF_INET表示创建一个IPv4协议族的套接字。通过socket函数的调用,我们可以创建不同类型的网络套接字,如TCP
Linux中的PF(Packet Filter)是一种强大的网络包过滤和转发工具,它是基于BSD操作系统中的IPFilter开发的。PF主要用于控制网络流量,允许或拒绝数据包通过,以及进行网络地址转换...
sock = socket(PF_INET, SOCK_STREAM, 0); 然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构,其中指定address family时一般设置为AF_INET,即使用IP。 相关头文件中的定义:AF = Address Family PF = Protocol Family AF_INET =PF_INET 所以在windows中AF_INET与PF_INET完全一样.而在Unix/Linux系...
AF_INET代表地址格式,Internet代表IP地址。 PF_INET代表数据包格式,Internet代表IP、TCP/IP或UDP/IP。 在创建套接字时使用的地址族是AF_INET(在本例中为Internet协议地址)。例如,Linux内核支持其他29个地址族,如UNIX套接字和IPX,还支持与IRDA和蓝牙通信(AF_IRDA和AF_BLUETOOTH),但很难在这个低级别上使用它们。
PF_INET6 定义在 /include/linux/socket.h 文件中 #define AF_INET6 10 /* IP version 6 */ #define PF_INET6 AF_INET6 1. 2. 3. 其它的地址族定义: /* Supported address families. */ #define AF_UNSPEC 0 #define AF_UNIX 1 /* Unix domain sockets */ ...
.pf = PF_INET, .hooknum = NF_INET_FORWARD, .priority = NF_IP_PRI_FIRST + 1, }, { .hook = forward_hook2,// 转发的数据会经过该函数处理,但在forward_hook之后处理 .pf = PF_INET, .hooknum = NF_INET_FORWARD, .priority = NF_IP_PRI_FIRST + 2, // 优先级比第一个低一点 ...
static int __init inet_init(void) { ... (void)sock_register(&inet_family_ops); ... } 而inet_family_ops 则是定义在af_inet.c下的静态变量,并且已经进行了相应的初始化 static const struct net_proto_family inet_family_ops = { .family = PF_INET, //表示INET协议族 .create = inet_create...
{ { NULL, NULL }, ipt_local_out_hook, PF_INET, NF_IP_LOCAL_OUT, NF_IP_PRI_FILTER } }; 对应前面所分析nf_hook_ops的各个成员,不难确定这些初始化值的意义。 其中,对应IN和FORWARD的处理函数均为ipt_hook,OUT的处理函数则为ipt_local_out_hook,下面依次分析之。
目前,在domain参数为PF_INET的SOCK_STREAN的套接口中,protocol的参数为0意味着内核选择IPPROTO_TCP,也就是套接口使用TCP/IP协议。 使用PF_INET和SOCK_DGRAM 这个组合告诉内核选择UDP协议。也就是选择IPPROTO_UDP。 下表是一个总结: 当然Linux支持许多的协议,此处不多说。
pf:协议族名,Netfilter架构同样可以用于IP层之外,因此这个变量还可以有诸如PF_INET6,PF_DECnet等名字。 hook:HOOK点的名字,对于IP层,就是取上面的五个值; skb:不解释; indev:数据包进来的设备,以struct net_device结构表示; outdev:数据包出去的设备,以struct net_device结构表示; (后面可以看到,以上五个参数...