Compare commits

..

No commits in common. "c45cdd3ec6731867474c982d87c7e8e7a75612ab" and "27e032b919dd1e539f377b1adbccd0626b2bc0eb" have entirely different histories.

4 changed files with 34 additions and 304 deletions

View File

@ -1,12 +1,13 @@
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])
@ -15,45 +16,30 @@ 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.html", "r") as f: with open("role.svg", "r") as f:
template = jinja2.Template(f.read(), undefined=jinja2.StrictUndefined) template = jinja2.Template(f.read())
css = CSS("role.css")
for topo, desc in topos.items(): for topo, desc in topos.items():
Path(topo).mkdir(exist_ok=True)
build_topo(topo, desc["roles"])
for role in desc["roles"]: for role in desc["roles"]:
role_card(role, topo, template, css) 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()

View File

@ -1,6 +1,7 @@
@page { @page {
margin: 0; margin: 0;
size: A5; height: 8cm;
width: 25cm;
} }
html { html {
height: 100%; height: 100%;
@ -10,61 +11,7 @@ body {
box-sizing: border-box; box-sizing: border-box;
color: #2A3239; color: #2A3239;
display: flex; display: flex;
flex-direction: column; flex-wrap: rows;
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

@ -1,57 +0,0 @@
<!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 @@
--- ---
linéaire: lineaire:
roles: roles:
- num: 1 - num: 1
IP: 192.168.0.1 IP: 192.168.0.1
@ -49,7 +49,6 @@ linéaire:
- 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
@ -102,14 +101,12 @@ anneau:
- 5: 10.10.4.1 - 5: 10.10.4.1
- 1: 10.10.0.1 - 1: 10.10.0.1
étoile: etoile:
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
@ -119,179 +116,36 @@ anneau:
- num: 2 - num: 2
IP: 77.82.1.1 IP: 77.82.1.1
objectifs: objectifs:
- Envoyer un message à 77.82.10.1 - Envoyer un message à 77.82.5.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.3.1 - Envoyer un message à 77.82.4.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.4.1 - Envoyer un message à 77.82.0.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.5.1 - Envoyer un message à 77.82.1.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.1.1 - Envoyer un message à 77.82.3.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