Compare commits

..

4 Commits

Author SHA1 Message Date
Robert Bongart (MSc MSc MA)
aa0233ad59
Merge pull request #18 from 2lambda123/dependabot/npm_and_yarn/app/backend/npm_and_yarn-ec7b19cc00
Bump the npm_and_yarn group across 2 directories with 10 updates
2024-06-29 06:49:54 +02:00
dependabot[bot]
be98df17b0
Bump the npm_and_yarn group across 2 directories with 10 updates
Bumps the npm_and_yarn group with 3 updates in the /app/backend directory: [shell-quote](https://github.com/ljharb/shell-quote), [ws](https://github.com/websockets/ws) and [y18n](https://github.com/yargs/y18n).
Bumps the npm_and_yarn group with 8 updates in the /app/frontend directory:

| Package | From | To |
| --- | --- | --- |
| [semver](https://github.com/npm/node-semver) | `5.7.1` | `5.7.2` |
| [async](https://github.com/caolan/async) | `2.6.3` | `2.6.4` |
| [qs](https://github.com/ljharb/qs) | `6.5.2` | `6.5.3` |
| [dns-packet](https://github.com/mafintosh/dns-packet) | `1.3.1` | `1.3.4` |
| [highlight.js](https://github.com/highlightjs/highlight.js) | `9.18.3` | `10.7.3` |
| [cli-highlight](https://github.com/felixfbecker/cli-highlight) | `2.1.4` | `2.1.11` |
| [minimist](https://github.com/minimistjs/minimist) | `1.2.5` | `1.2.8` |
| [shell-quote](https://github.com/ljharb/shell-quote) | `1.7.2` | `1.8.1` |



Updates `shell-quote` from 1.7.2 to 1.8.1
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.7.2...v1.8.1)

Updates `ws` from 6.2.1 to 6.2.3
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/6.2.1...6.2.3)

Updates `y18n` from 4.0.0 to 4.0.3
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/y18n-v4.0.3/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/compare/v4.0.0...y18n-v4.0.3)

Updates `semver` from 5.7.1 to 5.7.2
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2)

Updates `async` from 2.6.3 to 2.6.4
- [Release notes](https://github.com/caolan/async/releases)
- [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md)
- [Commits](https://github.com/caolan/async/compare/v2.6.3...v2.6.4)

Updates `qs` from 6.5.2 to 6.5.3
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

Updates `dns-packet` from 1.3.1 to 1.3.4
- [Changelog](https://github.com/mafintosh/dns-packet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mafintosh/dns-packet/compare/v1.3.1...v1.3.4)

Updates `highlight.js` from 9.18.3 to 10.7.3
- [Release notes](https://github.com/highlightjs/highlight.js/releases)
- [Changelog](https://github.com/highlightjs/highlight.js/blob/10.7.3/CHANGES.md)
- [Commits](https://github.com/highlightjs/highlight.js/commits/10.7.3)

Updates `cli-highlight` from 2.1.4 to 2.1.11
- [Release notes](https://github.com/felixfbecker/cli-highlight/releases)
- [Commits](https://github.com/felixfbecker/cli-highlight/compare/v2.1.4...v2.1.11)

Updates `minimist` from 1.2.5 to 1.2.8
- [Changelog](https://github.com/minimistjs/minimist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.8)

Updates `shell-quote` from 1.7.2 to 1.8.1
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.7.2...v1.8.1)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: ws
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: y18n
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: semver
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: async
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: qs
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: dns-packet
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: highlight.js
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: cli-highlight
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: minimist
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: shell-quote
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-28 14:38:10 +00:00
Robert Bongart (MSc MSc MA)
daa3c0f165
Merge pull request #17 from 2lambda123/dependabot/npm_and_yarn/app/backend/npm_and_yarn-ecfa3dbf2e
Bump the npm_and_yarn group across 2 directories with 11 updates
2024-06-28 16:17:52 +02:00
dependabot[bot]
a44e61fe46
Bump the npm_and_yarn group across 2 directories with 11 updates
Bumps the npm_and_yarn group with 1 update in the /app/backend directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 11 updates in the /app/frontend directory:

| Package | From | To |
| --- | --- | --- |
| [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) | `7.11.5` | `7.24.7` |
| [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) | `0.2.0` | `0.2.2` |
| [elliptic](https://github.com/indutny/elliptic) | `6.5.3` | `6.5.5` |
| [eventsource](https://github.com/EventSource/eventsource) | `1.0.7` | `1.1.2` |
| [follow-redirects](https://github.com/follow-redirects/follow-redirects) | `1.13.0` | `1.15.6` |
| [json-schema](https://github.com/kriszyp/json-schema) | `0.2.3` | `0.4.0` |
| [jsprim](https://github.com/joyent/node-jsprim) | `1.4.1` | `1.4.2` |
| [lodash](https://github.com/lodash/lodash) | `4.17.20` | `4.17.21` |
| [url-parse](https://github.com/unshiftio/url-parse) | `1.4.7` | `1.5.10` |
| [ws](https://github.com/websockets/ws) | `6.2.1` | `6.2.3` |
| [y18n](https://github.com/yargs/y18n) | `4.0.0` | `4.0.3` |



Updates `lodash` from 4.17.20 to 4.17.21
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21)

Updates `@babel/traverse` from 7.11.5 to 7.24.7
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.7/packages/babel-traverse)

Updates `decode-uri-component` from 0.2.0 to 0.2.2
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

Updates `elliptic` from 6.5.3 to 6.5.5
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.5)

Updates `eventsource` from 1.0.7 to 1.1.2
- [Changelog](https://github.com/EventSource/eventsource/blob/master/HISTORY.md)
- [Commits](https://github.com/EventSource/eventsource/compare/v1.0.7...v1.1.2)

Updates `follow-redirects` from 1.13.0 to 1.15.6
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.13.0...v1.15.6)

Updates `json-schema` from 0.2.3 to 0.4.0
- [Commits](https://github.com/kriszyp/json-schema/compare/v0.2.3...v0.4.0)

Updates `jsprim` from 1.4.1 to 1.4.2
- [Changelog](https://github.com/TritonDataCenter/node-jsprim/blob/v1.4.2/CHANGES.md)
- [Commits](https://github.com/joyent/node-jsprim/compare/v1.4.1...v1.4.2)

Updates `lodash` from 4.17.20 to 4.17.21
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21)

Updates `url-parse` from 1.4.7 to 1.5.10
- [Commits](https://github.com/unshiftio/url-parse/compare/1.4.7...1.5.10)

Updates `ws` from 6.2.1 to 6.2.3
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/6.2.1...6.2.3)

Updates `y18n` from 4.0.0 to 4.0.3
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/y18n-v4.0.3/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/compare/v4.0.0...y18n-v4.0.3)

---
updated-dependencies:
- dependency-name: lodash
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: "@babel/traverse"
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: decode-uri-component
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: elliptic
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: eventsource
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: follow-redirects
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: json-schema
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: jsprim
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: url-parse
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: ws
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: y18n
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-28 11:16:40 +00:00
4 changed files with 24647 additions and 24437 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,128 +1,128 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import subprocess as sp import subprocess as sp
from app.utils import terminate_process, read_config from app.utils import terminate_process, read_config
from os import mkdir, path from os import mkdir, path
from flask import send_file, jsonify from flask import send_file, jsonify
import datetime import datetime
import shutil import shutil
import json import json
import sys import random
import re import sys
import secrets import re
class Capture(object): class Capture(object):
def __init__(self): def __init__(self):
self.random_choice_alphabet = "ABCDEF1234567890" self.random_choice_alphabet = "ABCDEF1234567890"
def start_capture(self): def start_capture(self):
""" """
Start a tshark capture on the created AP interface and save Start a tshark capture on the created AP interface and save
it in a temporary directory under /tmp/. it in a temporary directory under /tmp/.
:return: dict containing capture token and status. :return: dict containing capture token and status.
""" """
# Kill potential tshark zombies instances, if any. # Kill potential tshark zombies instances, if any.
terminate_process("tshark") terminate_process("tshark")
# Few context variable assignment # Few context variable assignment
self.capture_token = "".join( self.capture_token = "".join(
[secrets.choice(self.random_choice_alphabet) for i in range(8)]) [random.choice(self.random_choice_alphabet) for i in range(8)])
self.capture_dir = "/tmp/{}/".format(self.capture_token) self.capture_dir = "/tmp/{}/".format(self.capture_token)
self.assets_dir = "/tmp/{}/assets/".format(self.capture_token) self.assets_dir = "/tmp/{}/assets/".format(self.capture_token)
self.pcap = self.capture_dir + "capture.pcap" self.pcap = self.capture_dir + "capture.pcap"
self.iface = read_config(("network", "in")) self.iface = read_config(("network", "in"))
# For packets monitoring # For packets monitoring
self.list_pkts = [] self.list_pkts = []
self.last_pkts = 0 self.last_pkts = 0
# Make the capture and the assets directory # Make the capture and the assets directory
mkdir(self.capture_dir) mkdir(self.capture_dir)
mkdir(self.assets_dir) mkdir(self.assets_dir)
try: try:
sp.Popen(["tshark", "-i", self.iface, "-w", sp.Popen(["tshark", "-i", self.iface, "-w",
self.pcap, "-f", "tcp or udp"]) self.pcap, "-f", "tcp or udp"])
return {"status": True, return {"status": True,
"message": "Capture started", "message": "Capture started",
"capture_token": self.capture_token} "capture_token": self.capture_token}
except: except:
return {"status": False, return {"status": False,
"message": "Unexpected error: %s" % sys.exc_info()[0]} "message": "Unexpected error: %s" % sys.exc_info()[0]}
def get_capture_stats(self): def get_capture_stats(self):
""" """
Get some dirty capture statistics in order to have a sparkline Get some dirty capture statistics in order to have a sparkline
in the background of capture view. in the background of capture view.
:return: dict containing stats associated to the capture :return: dict containing stats associated to the capture
""" """
with open("/sys/class/net/{}/statistics/tx_packets".format(self.iface)) as f: with open("/sys/class/net/{}/statistics/tx_packets".format(self.iface)) as f:
tx_pkts = int(f.read()) tx_pkts = int(f.read())
with open("/sys/class/net/{}/statistics/rx_packets".format(self.iface)) as f: with open("/sys/class/net/{}/statistics/rx_packets".format(self.iface)) as f:
rx_pkts = int(f.read()) rx_pkts = int(f.read())
if self.last_pkts == 0: if self.last_pkts == 0:
self.last_pkts = tx_pkts + rx_pkts self.last_pkts = tx_pkts + rx_pkts
return {"status": True, return {"status": True,
"packets": [0*400]} "packets": [0*400]}
else: else:
curr_pkts = (tx_pkts + rx_pkts) - self.last_pkts curr_pkts = (tx_pkts + rx_pkts) - self.last_pkts
self.last_pkts = tx_pkts + rx_pkts self.last_pkts = tx_pkts + rx_pkts
self.list_pkts.append(curr_pkts) self.list_pkts.append(curr_pkts)
return {"status": True, return {"status": True,
"packets": self.beautify_stats(self.list_pkts)} "packets": self.beautify_stats(self.list_pkts)}
@staticmethod @staticmethod
def beautify_stats(data): def beautify_stats(data):
""" """
Add 0 at the end of the array if the len of the array is less Add 0 at the end of the array if the len of the array is less
than max_len. Else, get the last 100 stats. This allows to than max_len. Else, get the last 100 stats. This allows to
show a kind of "progressive chart" in the background for show a kind of "progressive chart" in the background for
the first packets. the first packets.
:return: a list of integers. :return: a list of integers.
""" """
max_len = 400 max_len = 400
if len(data) >= max_len: if len(data) >= max_len:
return data[-max_len:] return data[-max_len:]
else: else:
return data + [1] * (max_len - len(data)) return data + [1] * (max_len - len(data))
def stop_capture(self): def stop_capture(self):
""" """
Stop tshark if any instance present & ask create_capinfos. Stop tshark if any instance present & ask create_capinfos.
:return: dict as a small confirmation. :return: dict as a small confirmation.
""" """
if terminate_process("tshark"): if terminate_process("tshark"):
self.create_capinfos() self.create_capinfos()
return {"status": True, return {"status": True,
"message": "Capture stopped"} "message": "Capture stopped"}
else: else:
return {"status": False, return {"status": False,
"message": "No active capture"} "message": "No active capture"}
def create_capinfos(self): def create_capinfos(self):
""" """
Creates a capinfo json file. Creates a capinfo json file.
:return: dict as a small confirmation. :return: dict as a small confirmation.
""" """
infos = sp.Popen(["capinfos", self.pcap], infos = sp.Popen(["capinfos", self.pcap],
stdout=sp.PIPE, stderr=sp.PIPE) stdout=sp.PIPE, stderr=sp.PIPE)
infos = infos.communicate()[0] infos = infos.communicate()[0]
data = {} data = {}
for l in infos.decode().splitlines(): for l in infos.decode().splitlines():
try: try:
l = l.split(": ") if ": " in l else l.split("= ") l = l.split(": ") if ": " in l else l.split("= ")
if len(l[0]) and len(l[1]): if len(l[0]) and len(l[1]):
data[l[0].strip()] = l[1].strip() data[l[0].strip()] = l[1].strip()
except: except:
continue continue
with open("{}capinfos.json".format(self.assets_dir), 'w') as f: with open("{}capinfos.json".format(self.assets_dir), 'w') as f:
json.dump(data, f) json.dump(data, f)
return True return True

View File

@ -9,13 +9,13 @@ import sys
import time import time
import qrcode import qrcode
import base64 import base64
import random
import requests import requests
from wifi import Cell from wifi import Cell
from os import path, remove from os import path, remove
from io import BytesIO from io import BytesIO
from app.utils import terminate_process, read_config from app.utils import terminate_process, read_config
import secrets
class Network(object): class Network(object):
@ -170,14 +170,14 @@ class Network(object):
# Generate the hostapd configuration # Generate the hostapd configuration
if read_config(("network", "tokenized_ssids")): if read_config(("network", "tokenized_ssids")):
token = "".join([secrets.choice(self.random_choice_alphabet) token = "".join([random.choice(self.random_choice_alphabet)
for i in range(4)]) for i in range(4)])
self.AP_SSID = secrets.choice(read_config( self.AP_SSID = random.choice(read_config(
("network", "ssids"))) + "-" + token ("network", "ssids"))) + "-" + token
else: else:
self.AP_SSID = secrets.choice(read_config(("network", "ssids"))) self.AP_SSID = random.choice(read_config(("network", "ssids")))
self.AP_PASS = "".join( self.AP_PASS = "".join(
[secrets.choice(self.random_choice_alphabet) for i in range(8)]) [random.choice(self.random_choice_alphabet) for i in range(8)])
# Launch hostapd # Launch hostapd
if self.write_hostapd_config(): if self.write_hostapd_config():