Be the Man in the middle, and (ARP) Poison your network
The heredoc uglyness can be avoided with either:


The textwrap.dedent function; or
Using a module docstring such as




"""
Arp-poisening tool by @Ludisposed
Works on both Python2 and Python3
This tool is made for Unix(Kali) OS

Usage:
arper.py interface target_ip gateway_ip

Example:
python arper.py wlan0 192.168.1.70 192.168.1.1
"""


from scapy.all import *
import os

…

def main():
    try:
        interface = sys.argv[0]
        target_ip = sys.argv[1]
        gateway_ip = sys.argv[2]
    except:
        print(__doc__).strip()
        sys.exit(1)
    …


You could also improve your arguments parsing using existing tools: argparse in the standard library or click or docopt to name a few. Using argparse, your code could become:

"""
Arp-poisening tool by @Ludisposed
Works on both Python2 and Python3
This tool is made for Unix(Kali) OS
"""


import os
import sys
import signal
import argparse
import ipaddress
import threading

from scapy.all import *

…


def main(interface, target_ip, gateway_ip):
    packet_count = 1000

    # Sets the ipv4 to enable port_forwarding
    os.system("echo 1 &gt; /proc/sys/net/ipv4/ip_forward")
    conf.verb = 0
    …


def parse_command_line():
    parser = argparse.ArgumentParser(
            description=__doc__,
            epilog='Example: python arper.py wlan0 192.168.1.70 192.168.1.1')
    parser.add_argument('interface', help='&lt;some helpful description&gt;')
    parser.add_argument('target_ip', type=ipaddress.ip_address, help='…')
    parser.add_argument('gateway_ip', type=ipaddress.ip_address, help='…')
    return parser.parse_args()


if __name__ == '__main__':
    args = parse_command_line()
    main(args.interface, args.target_ip, args.gateway_ip)


However, usage of the ipaddress module makes it require Python 3.3 at least. You could stick with strings but would get less checks done on the input.