Planet Collab

🔒
❌ About FreshRSS
There are new available articles, click to refresh the page.
Before yesterdayYour RSS feeds

Some Open Source Python Networking Tools

I've been tinkering on & off for a while now with using Python to create tools to automate repetitive tasks & occasionally posting the source code on this blog. I've now published them all on GitHub under the BSD 3-clause licence, so that hopefully others can use & adapt them. Links below:

Data Tools

Voice Tools

Long term I'm thinking about putting together a front end using Flask to tie this all together into a self-service portal, but motivation terms & conditions apply (*need recertify my CCIE again this year).

ACI VLAN Pools

By Keyboard Banger

ACI VLAN Pools: Definitions assigned statically or dynamically. In ACI, the VLAN allocation to EPGs is either static or dynamic a statically allocated VLAN to the EPG is called static binding. This case is seen with Legacy Bridge Domains . Attention however: We need to distinguish two concepts related to […]

The post ACI VLAN Pools appeared first on .

ACI OSPF Configuration

By Keyboard Banger

Here are the steps to configure OSPF routing between ACI fabric and an external router. The part on the external router is not mentioned in this blog post, since I focus here only on ACI. Configure OSPF Interface Policy Configure a VLAN Pool see my blog post on VLAN Pools […]

The post ACI OSPF Configuration appeared first on .

ACI and MP-BGP

By Keyboard Banger

MP-BGP Definitions MP-BGP and iBGP use the same ASN runs on all fabric nodes (leafs and spines) to propagate routing information received from external routes. It is optional to configure a spine as a MP-BGP Route Reflector. Ideally configure more than one spine for this role. carries endpoint reachability information […]

The post ACI and MP-BGP appeared first on .

Python custom tool – Scapy Pinger

By italchemy

Usage? After sending a reboot, your script can check if the rebooted device is back on line and try to reestablish SSH connection to it. In place of print() command, you can put an action to perform, i.e.) SSH into the device and check post reboot status etc.

I wanted to create a ping tool to send ICMP to a rebooted server/router/switch and check if it is up or down.

1. if server is down it will ping with 5 seconds timeout, then print “Down1”. Then wait for designated time, 10 seconds. Keep sending ICMP for connectivity testing.
2. When server/router/switch is comes up, it will print “Up1” every 10 seconds. Here you can put a task to perform after SSH login.

Source code: ssh_check_loop.py
==========================================

from scapy.all import *

ip = ‘192.168.30.130’

def UpDown():
while True:
print(“Testing connection to : “, ip)
icmp = IP(dst=ip)/ICMP()
resp = sr1(icmp,timeout=5)
if resp == None:
print(“Down1”)
time.sleep(10)
else:
print(“Up1”)
time.sleep(10)
UpDown()

========== Result ==================
brendan@mint19:/myscripts$ sudo python3 ssh_check_loop3.py
Testing connection to : 192.168.30.130
Begin emission:
……………………………………………Finished sending 1 packets.
…………………………………………………………….
Received 121 packets, got 0 answers, remaining 1 packets
Down1
Testing connection to : 192.168.30.130
Begin emission:
…………………………………………Finished sending 1 packets.
……………………………………………………………………………………………………………….
Received 175 packets, got 0 answers, remaining 1 packets
Down1
Testing connection to : 192.168.30.130
Begin emission:
…Finished sending 1 packets.
.*
Received 5 packets, got 1 answers, remaining 0 packets
Up1
Testing connection to : 192.168.30.130
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
Up1

Write your first Python program – Times table

By italchemy

def times_table(n):
result = []
i = 1
while i < 10:
result.append(n*i)
i = i+ 1
return result

print(times_table(9))

How The Cloud Changed Everything

Just a few years ago, cloud based communications were great for early adopters, those who are prepared for a few hiccups - but lots of jitter, shock, and dropped calls made it really difficult to talk everyday people and businesses into trusting the cloud. Clark Peterson, board member of Cloud Communication Alliance, recalls, “we were we were out there trying to convince people, why would you ever trust anybody that brand you haven't heard?” 

Python custom tool – Scapy Pinger

By italchemy

Usage? After sending a reboot, your script can check if the rebooted device is back on line and try to reestablish SSH connection to it. In place of print() command, you can put an action to perform, i.e.) SSH into the device and check post reboot status etc.

I wanted to create a ping tool to send ICMP to a rebooted server/router/switch and check if it is up or down.

1. if server is down it will ping with 5 seconds timeout, then print “Down1”. Then wait for designated time, 10 seconds. Keep sending ICMP for connectivity testing.
2. When server/router/switch is comes up, it will print “Up1” every 10 seconds. Here you can put a task to perform after SSH login.

Source code: ssh_check_loop.py
==========================================

from scapy.all import *

ip = ‘192.168.30.130’

def UpDown():
while True:
print(“Testing connection to : “, ip)
icmp = IP(dst=ip)/ICMP()
resp = sr1(icmp,timeout=5)
if resp == None:
print(“Down1”)
time.sleep(10)
else:
print(“Up1”)
time.sleep(10)
UpDown()

========== Result ==================
brendan@mint19:/myscripts$ sudo python3 ssh_check_loop3.py
Testing connection to : 192.168.30.130
Begin emission:
……………………………………………Finished sending 1 packets.
…………………………………………………………….
Received 121 packets, got 0 answers, remaining 1 packets
Down1
Testing connection to : 192.168.30.130
Begin emission:
…………………………………………Finished sending 1 packets.
……………………………………………………………………………………………………………….
Received 175 packets, got 0 answers, remaining 1 packets
Down1
Testing connection to : 192.168.30.130
Begin emission:
…Finished sending 1 packets.
.*
Received 5 packets, got 1 answers, remaining 0 packets
Up1
Testing connection to : 192.168.30.130
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
Up1

How to cut out an object in GIMP and use as a Visio Stencil?

By italchemy

1, Open your image file in GIMP

2. Layer >> Transparency >> Add Alpha Channel

3. Free Select too (looks like knot)

4. Drag and select the portion you want to cut

5. Select >> Invert

6. Use “Ctrl + X” to cut the background

7. Save As (Export As) .png file type to save. Export!

8. Open the new image file in MS Visio

9. Add connection pointers and use in your MS Visio diagram.

 

 

Write your first Python program – Times table

By italchemy

def times_table(n):
result = []
i = 1
while i < 10:
result.append(n*i)
i = i+ 1
return result

print(times_table(9))

Google inverse les noms de domaines

By Stéphane Bortzmeyer

Le 16 janvier au matin, il y avait une bogue amusante (qui a duré quelques jours) dans le moteur de recherche Google. Les noms de domaine étaient dans certains cas inversés, plus exactement mélangés dans l'affichage.

Quand on cherche quelque chose dans ce moteur de recherche (sur une machine de bureau, car c'est différent sur les mobiles), Google affiche pour chaque résultat :

  • L'endroit où a été trouvé le résultat, sous une forme vaguement inspirée des breadcrumbs (Google affichait autrefois un URL, ce qui était plus intelligent mais a sans doute été changé sur demande du marketing car « M. Michu ne comprend rien aux URL » et Google n'aime pas éduquer les utilisateurs),
  • Le titre de la page, qui est un lien hypertexte (en promenant son pointeur dessus, on voit l'URL s'afficher en bas à gauche, ce qui est utile pour savoir où on va avant d'y foncer),
  • La date et un résumé.
On voit ici un exemple :

L'endroit de la page est fabriqué à partir de l'URL mais n'est pas un URL. Il commence par un nom de domaine et se continue par un chemin dans le site. Mais ce qui est amusant est que cet affichage est bogué. Dans certains cas, le nom de domaine est mélangé. L'exemple précédent est correct mais, si je cherche le département de physique de l'Université de Cambridge :

Le vrai nom de domaine est www.phy.cam.ac.uk mais Google affiche phy.www.cam.ac.uk. Autre exemple, avec le gouverneur de Californie :

Ici, le vrai nom était www.gov.ca.gov mais Google affiche gov.www.ca.gov. L'URL vers lequel pointe le résultat est néanmoins correct, comme on le voit avec cet autre exemple (Firefox affiche l'URL de destination en bas à gauche) :

Pourquoi cette bogue ? La raison fondamentale est sans doute une incompréhension des noms de domaine, notamment du fait que le nombre de composants d'un nom soit quelconque (contrairement à une légende répandue.) Vous noterez que les seuls noms ainsi massacrés sont des noms ayant plus de trois composants. Mais c'est curieux de la part de Google, dont les services ont d'habitude très peu de bogues.

Mais on peut aussi voir dans cette bogue le résultat d'une mentalité très fréquente dans le Web, et particulièrement chez Google, comme quoi les noms de domaine ne sont pas une information pertinente et peuvent être cachés, ou massacrés, sans problème.

Merci à Jean-Philippe Pick pour avoir noté le phénomène. Le problème a été réparé le 19 novembre, sans nouvelles de Google ou sans information publiée.

  • January 16th 2020 at 01:00

Unix: A history and a Memoir

By Stéphane Bortzmeyer

Ce livre est une histoire du système d'exploitation Unix, par une des personnes qui ont suivi l'aventure d'Unix depuis le début, Brian Kernighan.

D'abord, Kernighan écrit très bien, il a un vrai talent pour tout expliquer, y compris les questions informatiques complexes (comme le fameux tube, une des inventions les plus marquantes dans Unix). Ensuite, il a lui-même travaillé au développement d'Unix (il a notamment participé à la création du langage C, dans lequel Unix a été rapidement réécrit, après ses débuts en langage d'assemblage.) Cela lui permet de faire revivre une époque aujourd'hui bien distante.

Il y a fort longtemps, dans un pays lointain, pas du tout dans la Silicon Valley mais à Murray Hill, un gentil roi, la compagnie AT&T avait installé son service de recherche et développement, les Bell Labs. Les Bell Labs (qui existent encore aujourd'hui sous ce nom mais ne sont plus que l'ombre de ce qu'ils étaient) sont devenus une légende de la physique, de la mathématique et de l'informatique, avec pas moins de neuf prix Nobel obtenus (non, l'invention d'Unix n'a pas été récompensée par un prix Nobel.)

C'est dans ce pays merveilleux que deux informaticiens, Ken Thompson et Dennis Ritchie, après le semi-échec du projet Multics, et le retrait des Bell Labs de ce travail, se sont attaqués à une de ces tâches où tous les gens raisonnables vous disent « c'est complèment irréaliste, jeune homme, vous n'êtes pas sérieux ». Ils ont écrit un système d'exploitation et Unix était né, prêt à conquérir le monde. Ce livre est l'histoire d'Unix. Elle est pleine de rebondissements, de crises, de discussions.

Pour rappeler l'importance d'Unix, il faut se souvenir que beaucoup de choses qui nous semblent aujourd'hui évidentes en informatique ne l'étaient pas à l'époque. Par exemple, la grande majorité des systèmes d'exploitation imposaient de fixer une taille maximale à un fichier avant sa création. Si elle était trop faible, on devait re-créer un autre fichier et copier les données. Si cette taille était trop élevée, on gaspillait de l'espace disque. Unix a mis fin à cela et, aujourd'hui, cela va de soi. De même Unix a unifié les différents types de fichiers. Avant Unix, plusieurs systèmes d'exploitation avaient des commandes différentes pour copier un fichier contenant un programme Cobol et un fichier de données !

L'atmosphère très spéciale des Bell Labs, informelle, avec peu de bureaucratie, un accent mis sur les compétences et pas sur les titres (une méritocratie, une vraie) a beaucoup aidé à développer un système d'exploitation à succès. Kernighan raconte beaucoup d'histoires amusantes, mais consacre également du temps à l'analyse des facteurs importants dans le succès des Bell Labs. Il insiste sur les facteurs physiques (« geography is destiny ») : tout le monde sur le même site, et un mélange de bureaux fermés (même les stagiaires avaient leur propre bureau fermé, loin de l'open space bruyant empêchant la concentration) et de pièces communes où on pouvait aller quand on voulait, discuter et interagir avec les autres. Les Bell Labs ont été un cas peut-être unique, où toutes les conditions étaient réunies au même endroit, pour produire une étonnante quantité d'inventions géniales. Le tout était aidé par un financement stable et un management qui laissait les chercheurs tranquilles. Il est curieux (et triste) de noter qu'une entreprise 100 % capitaliste comme AT&T donnait plus de liberté et de stabilité financière à ses chercheurs qu'une université publique d'aujourd'hui, où les chercheurs doivent passer tout leur temps en travail administratif, en évaluation, et en recherche d'argent.

Aux Bell Labs, il était fréquent pour un chercheur de travailler sur plusieurs sujets de front et le livre de Kernighan donne une petite idée de la variété des sujets. Anecdote personnelle : j'ai utilisé (très peu !) le système Ratfor que l'auteur avait écrit, quand je faisais du calcul numérique.

Une particularité d'Unix est en effet la profusion d'outils pour informaticiens qui ont été développés sur ce système. L'auteur consacre de nombreuses pages à ces outils en insistant sur le fait que le goupe Unix des Bell Labs maîtrisait toujours la théorie et la pratique. Chaque membre du groupe pouvait écrire une thèse en informatique théorique, et inventer puis programmer des outils utiles. Mais on oublie souvent que les premiers utilisateurs d'Unix n'étaient pas que des informaticiens. Le premier argument « de vente » d'Unix auprès de la direction des Bell Labs était ses capacités de… traitement de texte. Le service des brevets de Bell Labs déposait beaucoup de brevets, et leur préparation prenait un temps fou. En bons informaticiens, les auteurs d'Unix ont automatisé une grande partie des tâches, et les juristes se sont mis à préparer les demandes de brevets sur Unix…

De nos jours, on associe souvent Unix au logiciel libre, puisque Linux, FreeBSD et bien d'autres héritiers de l'Unix original sont libres. Mais à la grande époque des Bell Labs, ces considérations politiques étaient absentes. Kernighan n'en parle jamais et, au contraire, insiste sur le verrouillage de bien des innovations par des brevets. C'est en raison de la licence restrictive de l'Unix d'AT&T que des systèmes comme Linux ou FreeBSD n'ont plus une seule ligne du code original d'AT&T : il a fallu tout réécrire pour échapper aux avocats.

Kernighan ne fait pas que raconter des anecdotes édifiantes. Il corrige également quelques légendes. Par exemple, le fameux commentaire dans le code source d'Unix « You are not expected to understand this » ne veut pas du tout dire « lecteur, tu es stupide, laisse ce code aux pros » mais « il n'est pas nécessaire de comprendre ce bout de code pour comprendre le reste ».

Vous ne serez pas surpris d'apprendre que le livre a été composé sur Unix, avec groff et Ghostscript.

  • January 14th 2020 at 01:00

Python multiple lists to Dictionary – a magic

By italchemy

This code is from 2 weeks of research and works like magic.
You can use multiple lists with the same number of items to for a dictionary.
key to value, where the value is a list of different items. In my example, I have used the IP as the key and switch names, switch types and IOS names as a listed values.

Using this, it makes the key to multiple values possible in a single for loop. This will come in very handy. Pick my brain and enjoy!!!

#####################################################################

# source code: lists2dic_magic.py
# IPs will be used as the keys
ip_keys = [‘192.168.185.1’, ‘192.168.185.12’, ‘192.168.185.123’, “192.168.100.21”]
# the following lists will form a tupled values and matched up with corresponding ips
mod_eng = [“WS-C2960V2-24TS-S”, “WS-C3560V2-24PS-S”, “WS-C3750V2-48TS-S”, “WS-C3850-48TS-S”]
h_eng = [“switch1”, “switch2”, “switch3”, “switch4”]
img_eng = [“c2960-ipbasek9-mz.122-55.SE12.bin”, “c3560-ipbasek9-mz.122-55.SE1.bin”, “c3750-ipbasek9-mz.122-55.SE12.bin”, “cat3k_caa-universalk9.16.09.04.SPA.bin”]
# Converting above three lists into a list.
h_mod_img_eng = list(zip(h_eng, mod_eng, img_eng))

#print(h_mod_img_eng)

#Now, match up ip_keys (ip addresses) to h_mod_img_eng and makea dictionary
ip_dic = {k:v for k,v in zip(ip_keys, h_mod_img_eng)}

# if a switch model belongs to one of the following groups, it will take respective control flow.
sw_gr01 = [“WS-C3560V2-24TS-S”, “WS-C3560V2-24PS-S”, “WS-C3560V2-48TS-S”]
sw_gr02 = [“WS-C3750V2-24TS-S”, “WS-C3750V2-24PS-S”, “WS-C3750V2-48TS-S”]
sw_gr03 = [“WS-C2960V2-24TS-S”, “WS-C2960V2-24PS-S”, “WS-C2960V2-48TS-S”]
sw_gr04 = [“WS-C3850-48TS-S”, “WS-C3850-24TS-S”, “WS-C3850-48PS-S”]

#print(ip_dic)

# For prove of concept, run the for loop with keys and values in our newly created dictionary.
# And print out the keys. Values can be indexed and assigned to another variable for use.
# print the keys and indexed values.

for k, v in ip_dic.items():
#print(k)
if v[1] in sw_gr01:
print(“sw_gr01”)
h_sw1 = (v[0])
ios_sw1 = (v[2])
print(h_sw1)
print(ios_sw1)
elif v[1] in sw_gr02:
print(“sw_gr02”)
h_sw2 = (v[0])
ios_sw2 = (v[2])
print(h_sw2)
print(ios_sw2)
elif v[1] in sw_gr03:
print(“sw_gr03”)
h_sw3 = (v[0])
ios_sw3 = (v[2])
print(h_sw3)
print(ios_sw3)
elif v[1] in sw_gr04:
print(“sw_gr04”)
h_sw3 = (v[0])
ios_sw3 = (v[2])
print(h_sw3)
print(ios_sw3)

else:
print(“ppingoo”)

#####################################################################
Run the code and the result looks like:

sw_gr03
switch1
c2960-ipbasek9-mz.122-55.SE12.bin
sw_gr01
switch2
c3560-ipbasek9-mz.122-55.SE1.bin
sw_gr02
switch3
c3750-ipbasek9-mz.122-55.SE12.bin
sw_gr04
switch4
cat3k_caa-universalk9.16.09.04.SPA.bin
[Finished in 0.1s]

The Evolving Role of the CIO

A company’s Chief Information Officer has a lot on its plate, and always has. But unlike other C-suite titles, it seems like this one’s role changes every quarter. Toby Buckalew, CIO at OneShare Health spoke with Kyle Burt and Mike Cromwell, and gave a rundown of what the role used to be, as well as what it is becoming. 

Python multiple lists to Dictionary – a magic

By italchemy

This code is from 2 weeks of research and works like magic.
You can use multiple lists with the same number of items to for a dictionary.
key to value, where the value is a list of different items. In my example, I have used the IP as the key and switch names, switch types and IOS names as a listed values.

Using this, it makes the key to multiple values possible in a single for loop. This will come in very handy. Pick my brain and enjoy!!!

#####################################################################

# source code: lists2dic_magic.py
# IPs will be used as the keys
ip_keys = [‘192.168.185.1’, ‘192.168.185.12’, ‘192.168.185.123’, “192.168.100.21”]
# the following lists will form a tupled values and matched up with corresponding ips
mod_eng = [“WS-C2960V2-24TS-S”, “WS-C3560V2-24PS-S”, “WS-C3750V2-48TS-S”, “WS-C3850-48TS-S”]
h_eng = [“switch1”, “switch2”, “switch3”, “switch4”]
img_eng = [“c2960-ipbasek9-mz.122-55.SE12.bin”, “c3560-ipbasek9-mz.122-55.SE1.bin”, “c3750-ipbasek9-mz.122-55.SE12.bin”, “cat3k_caa-universalk9.16.09.04.SPA.bin”]
# Converting above three lists into a list.
h_mod_img_eng = list(zip(h_eng, mod_eng, img_eng))

#print(h_mod_img_eng)

#Now, match up ip_keys (ip addresses) to h_mod_img_eng and makea dictionary
ip_dic = {k:v for k,v in zip(ip_keys, h_mod_img_eng)}

# if a switch model belongs to one of the following groups, it will take respective control flow.
sw_gr01 = [“WS-C3560V2-24TS-S”, “WS-C3560V2-24PS-S”, “WS-C3560V2-48TS-S”]
sw_gr02 = [“WS-C3750V2-24TS-S”, “WS-C3750V2-24PS-S”, “WS-C3750V2-48TS-S”]
sw_gr03 = [“WS-C2960V2-24TS-S”, “WS-C2960V2-24PS-S”, “WS-C2960V2-48TS-S”]
sw_gr04 = [“WS-C3850-48TS-S”, “WS-C3850-24TS-S”, “WS-C3850-48PS-S”]

#print(ip_dic)

# For prove of concept, run the for loop with keys and values in our newly created dictionary.
# And print out the keys. Values can be indexed and assigned to another variable for use.
# print the keys and indexed values.

for k, v in ip_dic.items():
#print(k)
if v[1] in sw_gr01:
print(“sw_gr01”)
h_sw1 = (v[0])
ios_sw1 = (v[2])
print(h_sw1)
print(ios_sw1)
elif v[1] in sw_gr02:
print(“sw_gr02”)
h_sw2 = (v[0])
ios_sw2 = (v[2])
print(h_sw2)
print(ios_sw2)
elif v[1] in sw_gr03:
print(“sw_gr03”)
h_sw3 = (v[0])
ios_sw3 = (v[2])
print(h_sw3)
print(ios_sw3)
elif v[1] in sw_gr04:
print(“sw_gr04”)
h_sw3 = (v[0])
ios_sw3 = (v[2])
print(h_sw3)
print(ios_sw3)

else:
print(“ppingoo”)

#####################################################################
Run the code and the result looks like:

sw_gr03
switch1
c2960-ipbasek9-mz.122-55.SE12.bin
sw_gr01
switch2
c3560-ipbasek9-mz.122-55.SE1.bin
sw_gr02
switch3
c3750-ipbasek9-mz.122-55.SE12.bin
sw_gr04
switch4
cat3k_caa-universalk9.16.09.04.SPA.bin
[Finished in 0.1s]

❌