Git Product home page Git Product logo

netfil's Introduction

netfil

This is a experimental beginner Network Kernel Extention (NKE) with a menu bar application. It can filter by process identifier, IP, or network interfaces using a i/o byte limit.

This project is NOT meant to be run on a production machine - use at your own risk! Tested on macOS 10.12.1

This is a kernel level alternative to netman.

The following NKE filters are used:

Example use cases

  • Create a socket filter to ensure an application only uploads X bytes
  • Create an interface filter to ensure you don't go over your data limit when tethering
  • Create an IP filter to manage your bandwidth usage to an external host

KEXT

You can load the KEXT with the ./reload.sh iffilter.kext com.company.netfil command. Note: Loading unsigned kernel extensions requires System Integrity Protection (SIP) to be turn off.

System Controls

This NKE uses sysctl to cross boundaries between kernel code and appliactions.

You can communicate directly with them using the sysctl command. To view most system controls run sysctl -a net.netfil

Interface Filter

  • net.netfil.interface.list <struct CCArray>: size is the number of interfaces; names contains a list of null-terminated network interface names.
  • net.netfil.interface.ibyte <int>
  • net.netfil.interface.obyte <int>
  • net.netfil.interface.iobyte <int>
  • net.netfil.interface.status <int>: 0 is "off", 1 is "on"

Socket Filter

  • net.netfil.socket.pid <int>
  • net.netfil.socket.ibyte <int>
  • net.netfil.socket.obyte <int>
  • net.netfil.socket.iobyte <int>
  • net.netfil.socket.status <int>: 0 is "off", 1 is "on"

IP Filter

  • net.netfil.ip.addr <struct in_addr> or <struct in6_addr>
  • net.netfil.ip.ibyte <int>
  • net.netfil.ip.obyte <int>
  • net.netfil.ip.iobyte <int>
  • net.netfil.ip.status <int>: 0 is "off", 1 is "on"

Note: You cannot set the net.netfil.ip.addr or the net.netfil.interface.list via commandline.

To run a fitler, first set its' options then change its' status to 1. It is always smart to validate your options before you start.

For iobyte, ibyte, and obyte, a zero value represents unmetered/unlimited (no filtering).

Menu Bar / GUI Application

You can use the menu bar application to control the KEXT. A green icon with a dot means the filter is "on", a red icon with a line means the filter is "off", a gray icon with a radar-like symobl means the KEXT is probably not loaded or there is an error. Icon are from Oxygen Team.

Limitations

KEXT

  • Right now you can only run one socket, interface, or IP filter at a time.
  • Does not add new interfaces to filter (mac policy might be able to help with this?)
  • Anyone can change the variables as root permission is not required. This is very dangerous!
  • Not signed so have to jump thru some hoops to get this loaded on your machine.

GUI

  • Application will only filter IPv4 addresses for the IP filter.
  • Application will not be alerted instantly on KEXT changes.

Useful Resources

License

See LICENSE.

Disclaimer

See DISCLAIMER.

netfil's People

Contributors

iadgovuser20 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.