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 cairosvg
#import cairosvg
from weasyprint import HTML, CSS
import jinja2
from pathlib import Path
import networkx as nx
import matplotlib.pyplot as plt
#cairosvg.svg2pdf(url="role.svg", write_to="role.pdf")
def graph(roles):
g = nx.Graph()
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]))
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:
topos = yaml.load(f, Loader=yaml.SafeLoader)
with open("role.svg", "r") as f:
template = jinja2.Template(f.read())
with open("role.html", "r") as f:
template = jinja2.Template(f.read(), undefined=jinja2.StrictUndefined)
css = CSS("role.css")
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))
ax = plt.gca()
ax.set_title('Random graph')
ax.set_title(f"Forme du réseau: {topo}")
g = graph(desc['roles'])
nx.draw(g, with_labels=True,
node_color='lightgreen',
node_size=700,
ax=ax)
_ = ax.axis('off')
plt.savefig(f"{topo}/forme.pdf")
plt.cla()
Path(topo).mkdir(exist_ok=True)
build_topo(topo, desc["roles"])
for role in desc["roles"]:
role_card(role, topo, template, css)

View File

@ -1,7 +1,6 @@
@page {
margin: 0;
height: 8cm;
width: 25cm;
size: A5;
}
html {
height: 100%;
@ -11,7 +10,61 @@ body {
box-sizing: border-box;
color: #2A3239;
display: flex;
flex-wrap: rows;
justify-content: space-between;
flex-direction: column;
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:
- num: 1
IP: 192.168.0.1
@ -49,6 +49,7 @@ lineaire:
- Ne marche plus après avoir transmis 3 messages
liens:
- 5: 192.168.4.1
anneau:
roles:
- num: 1
@ -101,12 +102,14 @@ anneau:
- 5: 10.10.4.1
- 1: 10.10.0.1
etoile:
étoile:
roles:
- num: 1
IP: 77.82.0.1
objectifs:
particularites:
- Après 10 transmissions, ne marche plus.
- (*) Ouvrir et noter tous les messages transmis.
liens:
- 2: 77.82.1.1
- 3: 77.82.2.1
@ -116,36 +119,179 @@ etoile:
- num: 2
IP: 77.82.1.1
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:
liens:
- 1: 77.82.0.1
- num: 3
IP: 77.82.2.1
objectifs:
- Envoyer un message à 77.82.4.1
- Envoyer un message à 77.82.3.1
particularites:
liens:
- 1: 77.82.0.1
- num: 4
IP: 77.82.3.1
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:
liens:
- 1: 77.82.0.1
- num: 5
IP: 77.82.4.1
objectifs:
- Envoyer un message à 77.82.1.1
- Envoyer un message à 77.82.5.1
particularites:
liens:
- 1: 77.82.0.1
- num: 6
IP: 77.82.5.1
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:
liens:
- 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