Compare commits

...

2 Commits

Author SHA1 Message Date
c45cdd3ec6 Feat: topo mesh et mesh dns
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-02 12:18:51 +01:00
90d082ba08 Feat: création des cartes 2021-02-02 11:40:39 +01:00
4 changed files with 305 additions and 35 deletions

View File

@ -1,13 +1,12 @@
import yaml import yaml
import cairosvg #import cairosvg
from weasyprint import HTML, CSS
import jinja2 import jinja2
from pathlib import Path from pathlib import Path
import networkx as nx import networkx as nx
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
#cairosvg.svg2pdf(url="role.svg", write_to="role.pdf")
def graph(roles): def graph(roles):
g = nx.Graph() g = nx.Graph()
g.add_nodes_from([str(role["num"]) for role in roles]) g.add_nodes_from([str(role["num"]) for role in roles])
@ -16,30 +15,45 @@ def graph(roles):
g.add_edge(str(role["num"]), str(list(lien.keys())[0])) g.add_edge(str(role["num"]), str(list(lien.keys())[0]))
return g return g
def build_topo(topo, roles):
plt.figure(figsize=(2,2))
ax = plt.gca()
#ax.set_title(f"Forme du réseau: {topo}")
g = graph(roles)
nx.draw(g,
with_labels=True,
node_color='white',
node_size=100,
ax=ax)
_ = ax.axis('off')
plt.margins(0.2)
plt.subplots_adjust(left=0, right=1, top=1, bottom=0)
plt.savefig(f"{topo}/forme.png",
transparent=True,
)
plt.cla()
def role_card(role, topo, template, css):
card = template.render(topo=topo, **role)
dest = f"{topo}/role{role['num']}.html"
with open(dest, "w") as f:
f.write(card)
#cairosvg.svg2pdf(url=dest, write_to=dest.replace("svg", "pdf"))
HTML(dest).write_pdf(dest.replace("html", "pdf"), stylesheets=[css])
with open("roles.yml", "r") as f: with open("roles.yml", "r") as f:
topos = yaml.load(f, Loader=yaml.SafeLoader) topos = yaml.load(f, Loader=yaml.SafeLoader)
with open("role.svg", "r") as f: with open("role.html", "r") as f:
template = jinja2.Template(f.read()) template = jinja2.Template(f.read(), undefined=jinja2.StrictUndefined)
css = CSS("role.css")
for topo, desc in topos.items(): for topo, desc in topos.items():
for role in desc["roles"]:
card = template.render(**role)
Path(topo).mkdir(exist_ok=True)
dest = f"{topo}/role{role['num']}.svg"
with open(dest, "w") as f:
f.write(card)
cairosvg.svg2pdf(url=dest, write_to=dest.replace("svg", "pdf"))
plt.figure(figsize=(5,5)) Path(topo).mkdir(exist_ok=True)
ax = plt.gca()
ax.set_title('Random graph') build_topo(topo, desc["roles"])
ax.set_title(f"Forme du réseau: {topo}")
g = graph(desc['roles']) for role in desc["roles"]:
nx.draw(g, with_labels=True, role_card(role, topo, template, css)
node_color='lightgreen',
node_size=700,
ax=ax)
_ = ax.axis('off')
plt.savefig(f"{topo}/forme.pdf")
plt.cla()

View File

@ -1,7 +1,6 @@
@page { @page {
margin: 0; margin: 0;
height: 8cm; size: A5;
width: 25cm;
} }
html { html {
height: 100%; height: 100%;
@ -11,7 +10,61 @@ body {
box-sizing: border-box; box-sizing: border-box;
color: #2A3239; color: #2A3239;
display: flex; display: flex;
flex-wrap: rows; flex-direction: column;
justify-content: space-between;
margin: 0; margin: 0;
} }
header {
display: flex;
flex-direction: row;
background-color: #D9411E;
justify-content: space-between;
}
header > * {
padding: 10px;
}
#layout {
width: 15%;
background-color: #333;
}
#layout > img {
width: 4em;
height: 4em;
min-height: 100%;
min-width: 100%;
vertical-align: middle;
}
#ip {
font-size: 2em;
display: flex;
justify-content: center;
text-align: center;
}
#number {
background-color: #333;
color: #fff;
width: 15%;
font-size: 2em;
display: flex;
justify-content: center;
text-align: center;
}
main {
display: flex;
flex-direction: column;
justify-content: space-between;
}
main > * {
padding: 10px;
}
#links {
background-color: #eeeeee;
border: solid black;
border-width: medium 0 medium 0;
}

View File

@ -0,0 +1,57 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link href="../role.css" rel="stylesheet">
<title>Role {{num}} </title>
<meta name="description" content="Role">
</head>
<body>
<header>
<span id="layout">
<img src="../{{topo}}/forme.png">
</span>
<span id="ip">
<p>IP: {{IP}}</p>
</span>
<span id="number">
<p># {{ num }} </p>
</span>
</header>
<main>
<section id="goals">
<h2>Objectifs:</h2>
{% if objectifs %}
<ul>
{% for o in objectifs %}
<li>{{ o }}</li>
{% endfor %}
</ul>
{% endif %}
</section>
<section id="events">
<h2>Particularités:</h2>
{% if particularites %}
<ul>
{% for p in particularites %}
<li>{{ p }}</li>
{% endfor %}
</ul>
{% else %}
{% endif %}
</section>
<section id="links">
<h2>Voisins connus</h2>
{% if liens %}
<ul>
{% for l in liens %}
<li>{{ l | replace("{", "") | replace("}", "")}}</li>
{% endfor %}
</ul>
{% endif %}
</section>
</main>
</body>
</html>

View File

@ -1,5 +1,5 @@
--- ---
lineaire: linéaire:
roles: roles:
- num: 1 - num: 1
IP: 192.168.0.1 IP: 192.168.0.1
@ -49,6 +49,7 @@ lineaire:
- Ne marche plus après avoir transmis 3 messages - Ne marche plus après avoir transmis 3 messages
liens: liens:
- 5: 192.168.4.1 - 5: 192.168.4.1
anneau: anneau:
roles: roles:
- num: 1 - num: 1
@ -101,12 +102,14 @@ anneau:
- 5: 10.10.4.1 - 5: 10.10.4.1
- 1: 10.10.0.1 - 1: 10.10.0.1
etoile: étoile:
roles: roles:
- num: 1 - num: 1
IP: 77.82.0.1 IP: 77.82.0.1
objectifs: objectifs:
particularites: particularites:
- Après 10 transmissions, ne marche plus.
- (*) Ouvrir et noter tous les messages transmis.
liens: liens:
- 2: 77.82.1.1 - 2: 77.82.1.1
- 3: 77.82.2.1 - 3: 77.82.2.1
@ -116,36 +119,179 @@ etoile:
- num: 2 - num: 2
IP: 77.82.1.1 IP: 77.82.1.1
objectifs: objectifs:
- Envoyer un message à 77.82.5.1 - Envoyer un message à 77.82.10.1
- Envoyer un message à 77.82.5.1 et demander une réponse
particularites: particularites:
liens: liens:
- 1: 77.82.0.1 - 1: 77.82.0.1
- num: 3 - num: 3
IP: 77.82.2.1 IP: 77.82.2.1
objectifs: objectifs:
- Envoyer un message à 77.82.4.1 - Envoyer un message à 77.82.3.1
particularites: particularites:
liens: liens:
- 1: 77.82.0.1 - 1: 77.82.0.1
- num: 4 - num: 4
IP: 77.82.3.1 IP: 77.82.3.1
objectifs: objectifs:
- Envoyer un message à 77.82.0.1 - Envoyer un message à 77.82.4.1
- Envoyer un message à 77.82.2.1 et demander une réponse
particularites: particularites:
liens: liens:
- 1: 77.82.0.1 - 1: 77.82.0.1
- num: 5 - num: 5
IP: 77.82.4.1 IP: 77.82.4.1
objectifs: objectifs:
- Envoyer un message à 77.82.1.1 - Envoyer un message à 77.82.5.1
particularites: particularites:
liens: liens:
- 1: 77.82.0.1 - 1: 77.82.0.1
- num: 6 - num: 6
IP: 77.82.5.1 IP: 77.82.5.1
objectifs: objectifs:
- Envoyer un message à 77.82.3.1 - Envoyer un message à 77.82.1.1
- Envoyer un message à 77.82.4.1 et demander une réponse
particularites: particularites:
liens: liens:
- 1: 77.82.0.1 - 1: 77.82.0.1
mesh:
roles:
- num: 1
IP: 77.82.1.1
objectifs:
particularites:
- Envoyer message à 131.240.1.1 et demander une réponse.
liens:
- 2: 77.82.0.1
- num: 2
IP: 77.82.0.1
objectifs:
particularites:
- À partir du 2e message transmis, ouvre les messages, barre ce qui est écrit et écrit quelque chose d'autre.
liens:
- 1: 77.82.1.1
- 3: 131.240.0.1
- 7: 51.12.0.1
- num: 3
IP: 131.240.0.1
objectifs:
- Après 5 messages transmis, arrête de transmettre les messages.
particularites:
liens:
- 4: 131.240.1.1
- 2: 77.82.0.1
- 5: 151.10.0.1
- 7: 51.12.0.1
- num: 4
IP: 131.240.1.1
objectifs:
- Envoyer message à 151.10.1.1 et demander une réponse.
particularites:
liens:
- 3: 131.240.0.1
- num: 5
IP: 151.10.0.1
objectifs:
particularites:
liens:
- 6: 151.10.1.1
- 3: 131.240.0.1
- 7: 51.12.0.1
- num: 6
IP: 151.10.1.1
objectifs:
- Envoyer message à 51.12.1.1 et demander une réponse.
particularites:
liens:
- 5: 151.10.0.1
- num: 7
IP: 51.12.0.1
objectifs:
- Après 3 messages transmis, enregistre tous les messages qu'il transmet.
particularites:
liens:
- 8: 51.12.1.1
- 2: 77.82.0.1
- 3: 131.240.0.1
- 5: 151.10.0.1
- num: 8
IP: 51.12.1.1
objectifs:
- Envoyer message à 77.81.1.1 et demander une réponse.
particularites:
liens:
- 7: 51.12.0.1
mesh_dns:
roles:
- num: 1
IP: 77.82.1.1
objectifs:
- Se connecter à 2gt1.stex pour demander la page HTML
particularites:
- Utilisateur du web.
- Connaît le serveur DNS à l'adresse 131.82.0.1
liens:
- 2: 77.82.0.1
- num: 2
IP: 77.82.0.1
objectifs:
particularites:
liens:
- 1: 77.82.1.1
- 3: 131.240.0.1
- 7: 51.12.0.1
- num: 3
IP: 131.240.0.1
objectifs:
particularites:
liens:
- 4: 131.240.1.1
- 2: 77.82.0.1
- 5: 151.10.0.1
- 7: 51.12.0.1
- num: 4
IP: 131.240.1.1
objectifs:
- Répondre aux requêtes DNS.
particularites:
- Serveur DNS, connait les noms de domaine suivants
- SNT.stex à l'adresse 131..240.1.1
- 2gt1.stex à l'adresse 151.10.1.1
liens:
- 3: 131.240.0.1
- num: 5
IP: 151.10.0.1
objectifs:
particularites:
liens:
- 6: 151.10.1.1
- 3: 131.240.0.1
- 7: 51.12.0.1
- num: 6
IP: 151.10.1.1
objectifs:
- Renvoyer une page HTML quand on nous le demande.
particularites:
- Serveur Web connu sous le nom de domaine 2gt1.stex
liens:
- 5: 151.10.0.1
- num: 7
IP: 51.12.0.1
objectifs:
particularites:
liens:
- 8: 51.12.1.1
- 2: 77.82.0.1
- 3: 131.240.0.1
- 5: 151.10.0.1
- num: 8
IP: 51.12.1.1
objectifs:
- Renvoyer une page HTML quand on nous le demande.
particularites:
- Serveur Web connu sous le nom de domaine SNT.stex
liens:
- 7: 51.12.0.1