Verwendete Tools und Hinweise

Einleitung und Motivation

Für ein Projekt, keine Ahnung mehr wofür ich das brauchte, musste ich auf die ping-Funktion zurückgreifen.

Da ich meistens in C# unterwegs bin, habe ich mir mal die Implementierung von ping unter (damals noch .Net Core 6) angesehen und fand es erstaunlich dass das ping-Command der jeweiligen Plattform verwendet haben.

Anyway, ich dachte mir dass das besser geht…

 

In Dotnet Core 8 ist zumindest die Implementierung von ping in das Framework gewandert. Hier wurde also in der Zwischenzeit ein ähnlicher Ansatz gewählt. Allerdings scheinen hier jedoch auch noch ein paar Probleme vorzuliegen.

Ein einfacher Test gegen eine IpV4-Adresse (1.1.1.1) lieferte mir überhaupt keine TTL zurück. Die sollte ja bei IpV4 auf jeden Fall zurück geliefert werden. Von den Betriebssystem installierten ping Methoden ist man es außerdem gewöhnt, das eine IP-Adresse oder FQDN eingegeben werden kann. Hier muss man in der derzeitigen Implementierung auf die Eingabe der FQDN verzichten.

So, genug gemeckert…

Quellcode

Alles was in den folgenden Kapiteln gezeigt wird und von mir erstellt wurde, ist OpenSource und kann für eigene Dinge verwendet werden.

Die Quellen befinden sich in gitlab.com im folgenden Projekt.

PingC

In den folgenden Kapiteln wird näher auf einzelne Abschnitte eingegangen und beschrieben weshalb ich das so oder so gemacht habe…

Verwendete Tools / Bibliotheken

Ich gehe an dieser Stelle ausschließlich auf die Tools ein, die für die Erstellung und das Packaging der nativen Executables verantwortlich sind.

Eine detaillierte Beschreibung folgt in den weiteren Kapiteln

bflat

Für das Compiling der Anwendungen verwenden wir nicht den Standard-Dotnet-Compiler Roslyn, sondern wir nutzen bflat.

bflat erzeugt native Anwendungen, die ohne die Installation einer Runtime, direkt ausführbare Programme, für die jeweilige Plattform erzeugen.

https://flattened.net/

https://github.com/bflattened/bflat

upx

Um die Größe der, mit bflat erzeugten, ausführbaren Datei weiter zu verringern, verwenden wir upx.

https://github.com/upx/upx

Build und Deployment

Der CI / CD Prozess findet in gitlab statt. Ich verwende ein eigens erstelltes Basis-Image (debian) in dem die Funktionen bflat und upx eingebaut werden. Mit diesem erstellten Build-Container wird die Anwendung gebaut, gepackt und deployt.

Wobei sich das Deployment darauf bezieht, das Artefakt in den Build-Artefakten von gitlab zu speichern. Hier können sie dann runter geladen und angewandt werden. Weitere Informationen hierzu in Kapitel 5 und 6