removed netgenie proj
This commit is contained in:
parent
3c595ff619
commit
ff933875b9
1
NetGuard
1
NetGuard
@ -1 +0,0 @@
|
|||||||
Subproject commit 7db7f0785dd8d70e8caea243fd1409c80346cf17
|
|
@ -1,182 +0,0 @@
|
|||||||
import asyncio
|
|
||||||
import threading
|
|
||||||
from scapy.all import *
|
|
||||||
import argparse
|
|
||||||
import base64
|
|
||||||
|
|
||||||
DEBUG=False
|
|
||||||
|
|
||||||
def print_dbg(s):
|
|
||||||
if DEBUG:
|
|
||||||
print(s)
|
|
||||||
|
|
||||||
class NGServer:
|
|
||||||
def __init__(self, bridge_ip='127.0.0.1', bridge_port=8000,
|
|
||||||
ioip='127.0.0.1',
|
|
||||||
incoming_port=8001, outgoing_port=8002):
|
|
||||||
self.incoming_queue = None # asyncio.Queue()
|
|
||||||
self.outgoing_queue = None # asyncio.Queue()
|
|
||||||
self.client_reader = None
|
|
||||||
self.client_writer = None
|
|
||||||
self.server_reader = None
|
|
||||||
self.server_writer = None
|
|
||||||
self.server_thread = None
|
|
||||||
|
|
||||||
self.bridge_ip = bridge_ip
|
|
||||||
self.bridge_port = bridge_port
|
|
||||||
self.ioip = ioip
|
|
||||||
self.incoming_port = incoming_port
|
|
||||||
self.outgoing_port = outgoing_port
|
|
||||||
|
|
||||||
async def handle_client(self, reader, writer):
|
|
||||||
self.client_reader = reader
|
|
||||||
self.client_writer = writer
|
|
||||||
while True:
|
|
||||||
data = await reader.read(1024)
|
|
||||||
if not data:
|
|
||||||
writer.close()
|
|
||||||
break
|
|
||||||
await self.incoming_queue.put(data)
|
|
||||||
|
|
||||||
async def handle_incoming(self, reader, writer):
|
|
||||||
self.incoming_queue = asyncio.Queue()
|
|
||||||
while True:
|
|
||||||
data = await self.incoming_queue.get()
|
|
||||||
writer.write(data)
|
|
||||||
await writer.drain()
|
|
||||||
|
|
||||||
async def handle_outgoing(self, reader, writer):
|
|
||||||
self.server_reader = reader
|
|
||||||
self.server_writer = writer
|
|
||||||
print_dbg("handle_outgoing - ENTER")
|
|
||||||
self.outgoing_queue = asyncio.Queue()
|
|
||||||
while True:
|
|
||||||
print_dbg("handle_outgoing - IN LOOP")
|
|
||||||
data = await reader.read(1024)
|
|
||||||
print_dbg("handle_outgoing - IP(data))={}".format(
|
|
||||||
IP(data)))
|
|
||||||
self.client_writer.write(data)
|
|
||||||
await self.client_writer.drain()
|
|
||||||
|
|
||||||
async def read_from_server(self):
|
|
||||||
print_dbg("read_from_server - ENTER")
|
|
||||||
while True:
|
|
||||||
# Switch reader to writer
|
|
||||||
print_dbg("read_from_server - IN LOOP")
|
|
||||||
data = await self.client_reader.read(1024)
|
|
||||||
print_dbg("read_from_server - IP(data))={}".format(
|
|
||||||
IP(data)))
|
|
||||||
if not data:
|
|
||||||
self.client_writer.close()
|
|
||||||
break
|
|
||||||
await self.outgoing_queue.put(data)
|
|
||||||
|
|
||||||
async def start_server(self):
|
|
||||||
server = await asyncio.start_server(
|
|
||||||
self.handle_client,
|
|
||||||
host=self.bridge_ip,
|
|
||||||
port=self.bridge_port)
|
|
||||||
async with server:
|
|
||||||
await server.serve_forever()
|
|
||||||
|
|
||||||
async def start_incoming_server(self):
|
|
||||||
server = await asyncio.start_server(
|
|
||||||
self.handle_incoming,
|
|
||||||
host=self.ioip,
|
|
||||||
port=self.incoming_port)
|
|
||||||
async with server:
|
|
||||||
await server.serve_forever()
|
|
||||||
|
|
||||||
async def start_outgoing_server(self):
|
|
||||||
server = await asyncio.start_server(
|
|
||||||
self.handle_outgoing,
|
|
||||||
host=self.ioip,
|
|
||||||
port=self.outgoing_port)
|
|
||||||
async with server:
|
|
||||||
await server.serve_forever()
|
|
||||||
|
|
||||||
async def start_thread(ng):
|
|
||||||
""" """
|
|
||||||
await asyncio.gather(
|
|
||||||
ng.start_server(),
|
|
||||||
ng.start_incoming_server(),
|
|
||||||
ng.start_outgoing_server(),
|
|
||||||
)
|
|
||||||
|
|
||||||
await asyncio.gather(
|
|
||||||
ng.read_from_server(),
|
|
||||||
ng.handle_incoming(),
|
|
||||||
ng.handle_outgoing(),
|
|
||||||
)
|
|
||||||
|
|
||||||
def run_thread(ng):
|
|
||||||
asyncio.run(start_thread(ng))
|
|
||||||
|
|
||||||
|
|
||||||
def startServerAndWait(args):
|
|
||||||
ng = NGServer(bridge_ip=args.bridge_ip,
|
|
||||||
bridge_port=args.bridge_port,
|
|
||||||
ioip=args.ioip,
|
|
||||||
incoming_port=args.incoming_port,
|
|
||||||
outgoing_port=args.outgoing_port)
|
|
||||||
ng.server_thread = threading.Thread(
|
|
||||||
target=run_thread,
|
|
||||||
args=(ng,))
|
|
||||||
ng.server_thread.start()
|
|
||||||
ng.server_thread.join()
|
|
||||||
|
|
||||||
def startThread(ng):
|
|
||||||
|
|
||||||
ng.server_thread = threading.Thread(
|
|
||||||
target=run_thread,
|
|
||||||
args=(ng,))
|
|
||||||
ng.server_thread.start()
|
|
||||||
|
|
||||||
def connectIO(inaddr='127.0.0.1', inport=8001, outaddr='127.0.0.1', outport=8002):
|
|
||||||
insock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
|
|
||||||
insock.connect((inaddr, inport))
|
|
||||||
outsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
|
|
||||||
outsock.connect((outaddr, outport))
|
|
||||||
return insock, outsock
|
|
||||||
|
|
||||||
|
|
||||||
def base64_decode_with_plus(data):
|
|
||||||
data = data.rstrip('+')
|
|
||||||
padding = 4 - len(data) % 4
|
|
||||||
data += '=' * padding
|
|
||||||
return base64.b64decode(data)
|
|
||||||
|
|
||||||
def base64_encode_with_plus(data):
|
|
||||||
encoded_data = base64.b64encode(data).rstrip(b'=')
|
|
||||||
padding = (4 - len(encoded_data) % 4) % 4
|
|
||||||
encoded_data += b'+' * padding
|
|
||||||
return encoded_data.decode('ascii')
|
|
||||||
|
|
||||||
|
|
||||||
def parseArgs():
|
|
||||||
args = argparse.ArgumentParser()
|
|
||||||
# The bridge ip and port
|
|
||||||
args.add_argument("-B","--bridge_ip", default='127.0.0.1',
|
|
||||||
help='The IP that listens for NetGenie mobile app client connections.')
|
|
||||||
args.add_argument("-b","--bridge_port", default=8000, help='The port that listens for NetGenie mobile app client connections.')
|
|
||||||
|
|
||||||
# The IO ip and ports
|
|
||||||
args.add_argument("-I","--ioip", default='127.0.0.1', help='The IP that listens on the server for connections from whoever is debugging the phone.')
|
|
||||||
args.add_argument("-i","--incoming_port", default=8001,
|
|
||||||
help='The port that the person debugging will read packets from the device.')
|
|
||||||
args.add_argument("-o","--outgoing_port", default=8002,
|
|
||||||
help='The port that the person debugging will write packets to the device.')
|
|
||||||
return args.parse_args()
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""
|
|
||||||
The NGServer class implements our NetGenie debug/bridge server.
|
|
||||||
"""
|
|
||||||
# Get the arguments
|
|
||||||
args = parseArgs()
|
|
||||||
# Start the server.
|
|
||||||
startServerAndWait(args)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
@ -1,67 +0,0 @@
|
|||||||
# Quick Start
|
|
||||||
|
|
||||||
## Starting the server
|
|
||||||
|
|
||||||
On the server, run the following
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ python3 -m venv .example
|
|
||||||
$ activate .example/bin/activate
|
|
||||||
|
|
||||||
$ python3 NetGenieSrv.py
|
|
||||||
```
|
|
||||||
|
|
||||||
This opens three sockets:
|
|
||||||
|
|
||||||
1. The bridge socket that listens for the phone to connect to.
|
|
||||||
2. An ``incoming'' socket to read packets sent from the device to the server
|
|
||||||
3. An ``outgoing'' socket to write packets from the server to the device.
|
|
||||||
|
|
||||||
On the phone, connect to the server and port specified by the `-B` and `-b` arguments.
|
|
||||||
|
|
||||||
This can be specified by changing the source code or using the following command-line
|
|
||||||
arguments:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ python3 NetGenieSrv.py -h
|
|
||||||
usage: NetGenieSrv.py [-h] [-B BRIDGE_IP] [-b BRIDGE_PORT] [-I IOIP] [-i INCOMING_PORT] [-o OUTGOING_PORT]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-B BRIDGE_IP, --bridge_ip BRIDGE_IP
|
|
||||||
The IP that listens for NetGenie mobile app client connections.
|
|
||||||
-b BRIDGE_PORT, --bridge_port BRIDGE_PORT
|
|
||||||
The port that listens for NetGenie mobile app client connections.
|
|
||||||
-I IOIP, --ioip IOIP The IP that listens on the server for connections from whoever is debugging the phone.
|
|
||||||
-i INCOMING_PORT, --incoming_port INCOMING_PORT
|
|
||||||
The port that the person debugging will read packets from the device.
|
|
||||||
-o OUTGOING_PORT, --outgoing_port OUTGOING_PORT
|
|
||||||
The port that the person debugging will write packets to the device.
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also start NetGenieSrv from a python REPL as follows:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
In [1]: import NetGenieSrv as ngs
|
|
||||||
In [2]: ng = ngs.NGServer(bridge_ip='0.0.0.0')
|
|
||||||
In [3]: ngs.startThread(ng)
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## Using the server
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ ipython3
|
|
||||||
|
|
||||||
import NetGenieSrv as ngs
|
|
||||||
from scapy.all import *
|
|
||||||
ip = IP(src='10.10.20.1', dst='255.255.4.20')
|
|
||||||
tcp = TCP(sport=8080, dport=8443)
|
|
||||||
pkt = ip/tcp
|
|
||||||
a = pkt.build()
|
|
||||||
|
|
||||||
insock, outsock = ngs.connectIO()
|
|
||||||
pktIn = insock.read(40) # Read a packet send from the phone
|
|
||||||
outsock.send(a) # Send a packet to the NetGenie client.
|
|
||||||
|
|
||||||
```
|
|
Loading…
x
Reference in New Issue
Block a user