Projects STRLCPY geneva Commits f620a117
🤬
  • ■ ■ ■ ■ ■ ■
    engine.py
    skipped 88 lines
    89 89   "engine",
    90 90   self.environment_id,
    91 91   log_level=log_level,
     92 + iface=iface,
    92 93   demo_mode=demo_mode)
    93 94   # Warn if these are not provided
    94 95   if not environment_id:
    skipped 20 lines
    115 116   self.out_nfqueue_thread = None
    116 117   self.in_nfqueue_thread = None
    117 118   self.censorship_detected = False
     119 + 
     120 + self.interface = iface
     121 + if not iface:
     122 + self.interface = actions.utils.get_interface()
     123 + 
    118 124   # Specifically define an L3Socket to send our packets. This is an optimization
    119 125   # for scapy to send packets more quickly than using just send(), as under the hood
    120 126   # send() creates and then destroys a socket each time, imparting a large amount
    121 127   # of overhead.
    122  - self.socket = conf.L3socket(iface=actions.utils.get_interface())
     128 + self.socket = conf.L3socket(iface=self.interface)
    123 129   
    124 130   def __enter__(self):
    125 131   """
    skipped 95 lines
    221 227   add_or_remove = "D"
    222 228   cmds = []
    223 229   for proto in ["tcp", "udp"]:
    224  - cmds += ["iptables -%s %s -p %s --%s %d -j NFQUEUE --queue-num %d" %
    225  - (add_or_remove, out_chain, proto, port1, self.server_port, self.out_queue_num),
    226  - "iptables -%s %s -p %s --%s %d -j NFQUEUE --queue-num %d" %
    227  - (add_or_remove, in_chain, proto, port2, self.server_port, self.in_queue_num)]
     230 + cmds += ["iptables -%s %s -p %s --%s %d -i %s -j NFQUEUE --queue-num %d" %
     231 + (add_or_remove, out_chain, proto, port1, self.server_port, self.interface, self.out_queue_num),
     232 + "iptables -%s %s -p %s --%s %d -i %s -j NFQUEUE --queue-num %d" %
     233 + (add_or_remove, in_chain, proto, port2, self.server_port, self.interface, self.in_queue_num)]
    228 234   # If this machine is acting as a middlebox, we need to add the same rules again
    229 235   # in the opposite direction so that we can pass packets back and forth
    230 236   if self.forwarder:
    231  - cmds += ["iptables -%s %s -p %s --%s %d -j NFQUEUE --queue-num %d" %
    232  - (add_or_remove, out_chain, proto, port2, self.server_port, self.out_queue_num),
    233  - "iptables -%s %s -p %s --%s %d -j NFQUEUE --queue-num %d" %
    234  - (add_or_remove, in_chain, proto, port1, self.server_port, self.in_queue_num)]
     237 + cmds += ["iptables -%s %s -p %s --%s %d -i %s -j NFQUEUE --queue-num %d" %
     238 + (add_or_remove, out_chain, proto, port2, self.server_port, self.interface, self.out_queue_num),
     239 + "iptables -%s %s -p %s --%s %d -i %s -j NFQUEUE --queue-num %d" %
     240 + (add_or_remove, in_chain, proto, port1, self.server_port, self.interface, self.in_queue_num)]
    235 241   
    236 242   for cmd in cmds:
    237 243   self.logger.debug(cmd)
    skipped 186 lines
    424 430   parser.add_argument('--no-save-packets', action='store_false', help='Disables recording captured packets')
    425 431   parser.add_argument("--in-queue-num", action="store", help="NfQueue number for incoming packets", default=1, type=int)
    426 432   parser.add_argument("--out-queue-num", action="store", help="NfQueue number for outgoing packets", default=None, type=int)
     433 + parser.add_argument("--interface", action="store", help="Limit the engine to just this interface", default=None)
    427 434   parser.add_argument("--demo-mode", action='store_true', help="Replaces all IPs with dummy IPs in log messages so as not to reveal sensitive IP addresses")
    428 435   
    429 436   args = parser.parse_args()
    skipped 21 lines
    451 458   in_queue_num=args["in_queue_num"],
    452 459   out_queue_num=args["out_queue_num"],
    453 460   save_seen_packets=args["no_save_packets"],
     461 + iface=args["interface"],
    454 462   demo_mode=args["demo_mode"])
    455 463   eng.initialize_nfqueue()
    456 464   while True:
    skipped 8 lines
Please wait...
Page is in error, reload to recover