代码之家  ›  专栏  ›  技术社区  ›  lvella

发送数据包时如何设置iptables标记?

  •  -1
  • lvella  · 技术社区  · 7 年前

    在从C程序发送数据包时,有没有一种方法可以设置这些标记,或者通过普通套接字接口,或者通过特定的linux系统调用?

    1 回复  |  直到 7 年前
        1
  •  1
  •   pevik Hudson    4 年前

    我找到了 SO_MARK 插座(7)手册页中的插座选项:

       SO_MARK (since Linux 2.6.25)
    
              Set the mark for each packet sent through this socket (similar
              to the netfilter MARK target but socket-based).  Changing the
              mark can be used for mark-based routing without netfilter or
              for packet filtering.  Setting this option requires the
              CAP_NET_ADMIN capability.
    

    正如我最初问的那样,不是每包都适合我的目的。你可以用 setsockopt()

    int fwmark;
    //fwmark = <some value>;
    
    if (setsockopt(sockfd, SOL_SOCKET, SO_MARK, &fwmark, sizeof fwmark) == -1)
        perror("failed setting mark for socket packets");