:::: MENU ::::

Home

  • Jun 06 / 2014
  • 0
Linux

Testing website using telnet (SSL/HTTPS)Tester votre site Internet en utilisant telnet (SSL/HTTPS)

When developping a website, you could need to send custom requests to your server so you can analyze its behavior and its responses.

If you’re not using secured protocol, that’s easy, you just need to connect to port 80 (usually) on your server and send your request as:

You will immediately get the server response with the headers:

But now, if you want to send the same request to a server running on secured protocol (as HTTPS on port 443), you can’t use this method given that the request will be sent in plain text and the server won’t be able to understand it.

You will need to use the tool s_client provided with openssl. Once the tool is started, you wil immediately receive the certificate informations and will be able to send your request:

You will immediately get the server response with the headers as previously (in my example, a 404 error is sent back due to a non-existing page requested):

That’s all folk 😉 !Il peut arriver lors du développement d’un site Internet, que vous ayez envie d’envoyer des requêtes personnalisées à votre serveur afin de voir son comportement et quelles seront ses réponses.

Avec un site n’utilisant pas de protocole sécurisé, rien de plus simple, il vous suffit de vous connecter sur le port 80 de votre site (en général) et d’envoyer votre requête :

Vous obtenez alors immédiatement le retour du serveur avec les en-têtes de la réponse :

Mais si maintenant vous souhaitez interroger de la même manière un serveur sur un port sécurisé (par exemple 443 pour HTTPS), vous ne pouvez pas utiliser cette méthode puisque la requête serait alors envoyée en clair et ne pourrait pas être interprétée par le serveur.

Il faut donc dans ce cas utiliser l’outil s_client fourni par openssl. Une fois l’outil lancé, vous recevrez immédiatement les informations de certificat et pourrez à la suite envoyer votre requête :

Vous obtiendrez alors la réponse du serveur comme dans l’exemple précédent (dans l’exemple, une erreur 404 puisque la page demandée n’existe pas) :

A vous de jouer 😉 !

  • May 03 / 2014
  • 0
Database

Find PostgreSQL database sizeTrouver la taille d’une base de données PostgreSQL

PostgreSQL is an object-relational database management system (ORDBMS). It’s a free and open-source tool available under BSD licence.

Thanks to some built-in functions, you can get several information regarding database and/or table size. You will find below the main and most used examples.

Database size (in octal)

Database size (in human understandable format)

All databases size

Table size (excluding indexes and some auxiliary data)

Table size (including all data)

Find the largest table in database

 For the full documentation, please visit http://www.postgresql.org/

PostgreSQL est un système de gestion de base de données relationnelle et objet (SGBDRO). C’est un outil libre disponible selon les termes d’une licence de type BSD.

Grâce à de nombreuses fonctions embarquées, vous pouvez obtenir des informations au sujet de la taille de la base de données et/ou d’une table précise. Vous trouverez ci-après les exemples principaux et les plus utilisés.

Taille de la base (en octets)

Taille de la base de données (dans un format “humain”)

Taille de toutes les bases

Taille d’une tablee (excluant les index et quelques données auxiliaires)

Taille d’une table (incluant toutes les données)

Trouver la plus grande table dans la base de données

 Pour obtenir la documentation complète, vous pouvez visiter http://www.postgresql.org/

  • Apr 03 / 2014
  • 0
Linux

Setup multiple default routes on LinuxConfigurer plusieurs routes par défaut sur Linux

The problem ?

Your system is running on Linux with multiple physical network interface cards (NIC) and each card has its own default gateway. By default, you can only set up a single default gateway on a system.

In our example, we will consider 2 NICs (eth0 and eth1) enabled with default gateway configured on eth0 interface.

rt1

On this scheme, we can imagine two different cases:

  1. The flow coming into eth0 will be returned through eth0 (default gateway)
  2. The flow coming into eth1 will be returned through eth0 (default gateway)

In the first case, there is no problem, each NIC will work independently but in the second case, if you configured default gateway on eth0, whatever the network card receiving the request, it will answer through eth0 which is the default gateway.

Solution

The solution will be to use a program called iproute2, which is included and installed in all current Linux distributions. The expected result is:

  1. The flow coming into eth0 is returned through eth0
  2. The flow coming into eth1 is returned through eth1

It should so look like the following scheme:

rt2

First of all, you will have to define new routing tables in the file /etc/iproute2/rt_tables by defining your own tables. Here, we are defining two new tables called rt0 and rt1:

Afterwards, you will have to configure your network cards (under /etc/network/interfaces if you’re running on a Debian-like system) as below:

And now, restart your networking service to set this new configuration up. This will be permanent.

You can now connect to your server using both interfaces, and it will automatically answer correctly through the good gateway !

Le problème ?

Votre système fonctionne sous Linux avec plusieurs cartes d’interface réseau (NIC) et chaque carte a sa propre passerelle par défaut. Seulement, par défaut, vous ne pouvez définir qu’une seule passerelle par défaut sur un système.

Dans notre exemple, nous considérerons 2 NICs (eth0 and eth1) activées avec la passerelle par défaut du système configurée sur l’interface eth0.

rt1

Selon ce schéma, on peut imaginer deux cas différents :

  1. Le flux arrivant sur eth0 sera renvoyé sur eth0 (passerelle par défaut)
  2. Le flux arrivant sur eth1 sera renvoyé sur eth0 (passerelle par défaut)

Dans le premier cas, il n’y a aucun problème, chaque NIC fonctionnera indépendamment mais dans le second, si la passerelle par défaut est configurée sur eth0, quelle que soit la carte réseau sur laquelle la requête arrive, la réponse sera renvoyée sur eth0 qui est la passerelle par défaut.

Solution

La solution sera d’utiliser un programme appelé iproute2, qui est inclus et installé dans la plupart des distributions courantes Linux. Le résultat attendu est donc :

  1. Le flux arrivant sur eth0 est renvoyé sur eth0
  2. Le flux arrivant sur eth1 est renvoyé sur eth1

On devrait donc obtenir quelque chose comme le schéma suivant :

rt2

Tout d’abord, il va falloir définir les nouvelles tables de routage dans le fichier /etc/iproute2/rt_tables en définissant vos propres tables. Ici, nous allons définir deux nouvelles tables appelées rt0 et rt1:

Après cela, vous devrez configurer vos cartes réseau (via le fichier /etc/network/interfaces si vous êtes sur un système basé Debian-like) tel que ci-dessous :

Et maintenant, redémarrer votre service réseau afin de mettre en place cette nouvelle configuration. Elle sera mise en place de manière permanente.

Vous pouvez maintenant vous connecter au serveur en utilisant les deux interfaces, et la réponse sera automatiquement redirigée sur la bonne interface via la bonne passerelle !

  • Mar 25 / 2014
  • 0
Linux

Download Flash Video Fragmented (F4F/F4M)Télécharger une vidéo Flash fragmentée (F4F/F4M)

Today, for network usage optimization purposes, a lot of videos are streamed and sent to the users as fragmented packets instead of one file. According to Adobe, F4F file is Flash MP4 Video Fragment created and used by Adobe Media Server for HTTP Dynamic streaming like CloudFront, Akamai, … If you want to download this video, you will have to download the script file KSV (download this script on Github) and execute it on a system with php enabled (install PHP on Windows).

Once you’re on the page where video is loading, you have to look for manifest file in source code or network exchanges. This file has F4M extension, correspondig to manifest, which is the file containing the inventory of all the video fragments. It will be necessary for the script execution.

Here is an example of how the command-line should look like (you can modify the quality parameter, and you have to specify the path for manifest file, and output file):

Here are the different options you can use to customize command-line:

All the original sources are available on GitHub : https://github.com/K-S-V/

Aujourd’hui, adin d’optimiser l’utilisation des ressources réseau, beaucoup de vidéos sont diffusées en streaming aux utilisateurs en tant que paquets fragmentés au lieu du chargement d’un fichier complet. Selon Adobe, les fichiers F4F sont des fichiers de format Flash MP4 Video Fragment créés et utilisés par Adobe Media Server pour les diffusions streaming en HTTP Dynamic comme Cloudfront, Akamai, … Si vous souhaitez télécharger cette vidéo, vous devrez récupérer le script KSV (disponible sur Github) et l’exécuter sur un environnement système permettant l’exécution de script PHP (installer PHP sur Windows).

Lorsque vous êtes sur la page où la vidéo est chargée, vous devrez rechercher dans le code source ou dans les échanges réseaux, la présence d’un fichier au format F4M qui correspond au fichier manifeste, recensant l’ensemble des fragments de la vidéo et qui sera nécessaire pour l’exécution du script.

Voici un exemple de ligne de commande que vous pouvez utiliser pour récupérer la vidéo (vous pouvez modifier la qualité, et vous devez indiquer le chemin vers le fichier manifeste, ainsi que le fichier de sortie) :

Voici les différentes options que vous pouvez utiliser pour personnaliser la ligne de commande :

Toutes les sources originales sont disponibles sur GitHub : https://github.com/K-S-V/

  • Mar 18 / 2014
  • 0
Linux

Install VMware Tools on ESXi for Ubuntu GuestInstaller VMware Tools sur un ESXi pour un système invité Ubuntu

If you want to install VMware Tools on ESXi for an Ubuntu Guest, there is two possibilities:

  1. Use the package provided on distribution (but can be not up-to-date and so not approved)
  2. Install directly from official sources provided in vSphere Client (will be automatically recognized)

Use the pre-package distribution

This solution is the easiest way to install tools. You just have to use apt on your guest to install it:

Use the official sources available in vSphere Client

This solution is not as simple as the previous one but is really sure and well-guided.

  1. Connect to your ESXi server using vSphere Client
  2. At this moment, ensure that you have a CDROM hardware available for your VM Guest (in Settings)
  3. Start your VM Guest running Ubuntu
  4. Check that you have already needed packages installed (most of time, they are not installed with a standard configuration):
    • gcc
    • build-essential
    • binutils

    You can use this command line to install them:

  5. You can now connect VMware Tools on your VM Guest using vSphere Client:
    • Right-click on your VM name
    • Select “Guest” > “Install/Upgrade VMware Tools”
    • Wait a few seconds

    This action will automatically (and transparently) mount the VMwre Tools CD into your VM Guest Ubuntu.

  6. Open a console on your VM Guest to mount the CDROM you just connected:

  7. Copy the VMwareTools-x.x.x-xxxxxxx.tar.gz file from the CDROM to a local folder (‘x’ values depend on version used):

  8. Unzip the VMware tools package you just copied:

  9. Go to the new folder created while unzipping file and run the installer script (perl script):

  10. From now, just follow the instructions displayed on the screen to install VMware tools.

Once all of this is done, you will see on vSphere, in VM details, that the vMware Tools are correctly installed.Si vous souhaitez installer les VMware Tools sur un ESXi pour un système invité Ubuntu, il y a deux possibilités :

  1. Utilisez le package fourni par la distribution (mais qui peut ne pas être à jour et donc non approuvé par vSphere)
  2. Installez directement depuis les sources officielles fournies dans vSphere Client (qui sera automatiquement reconnu

Utiliser la version pré-packagée de la distribution

Cette solution est le moyen le plus facile d’installer les VMwareTools. Vous avez juste à utiliser apt sur votre système invité pour les installer :

Utilisez les sources officielles disponibles dans vSphere Client

Cette solution n’est pas aussi simple que la précédente mais est vraiment sûre et bien guidée/détaillée.

  1. Connectez-vous à votre serveur ESXi en utilisant vSphere Client
  2. A ce moment, assurez vous que vous avez un lecteur CDROM disponible sur votre VM invitée (dans les Settings)
  3. Démarrez votre VM invitée sur Ubuntu
  4. Vérifiez que vous avez les packages nécessaires installés (la plupart du temps, ils ne sont pas installés avec une configuration standard) :
    • gcc
    • build-essential
    • binutils

    Vous pouvez utiliser cette ligne de commande pour les installer :

  5. Vous pouvez maintenant connecter VMware Tools à votre VM invitée en utilisant vSphere Client :
    • Faites un clic droit sur le nom de la VM
    • Sélectionnez “Guest” > “Install/Upgrade VMware Tools”
    • Attendez juste quelques secondes

    Cette action va automatiquement (et de manière transparente) monter le CD des VMware Tools sur le système invité.

  6. Ouvrez une console sur le système invité pour monter le CD que vous venez de connecter :

  7. Copiez le fichier VMwareTools-x.x.x-xxxxxxx.tar.gz du CDROM vers un répertoire local (les valeurs ‘x’ dépendent de la version utilisée) :

  8. Décompressez le package VMware tools que vous venez de copier :

  9. Allez dans le dossier créé durant la décompression du fichier et lancez le script d’installation (script perl) :

  10. A partir de là, vous n’avez plus qu’à suivre les instructions affichées à l’écran pour installer les VMware Tools.

Une fois que tout ceci est fait, vous constaterez sur vSphere, dans les détails de la VM, que les VMware Tools ont correctement été installés.

  • Mar 14 / 2014
  • 0
Python, web2py

Unserialize web2py requests and allow concurrent accessDésérialiser des requêtes web2py et permettre des accès concurrents

With a default configuration for your web2py application, you will notice that when you are launching an action, if this one is quite long to execute, you won’t be able to open a new tab to run another request on the same application. This can be explained because when you are launching an action, your browser is sending session informations to the server and your session file on server-side is so opened in writing mode for being updated. A lock is set on this file, blocking any other action to be executed for this session while the lock is not released.

This problem is effectively not existing if you are using a database for your session management instead of a file system. To use a database system, you just need to declare your database:

and initiate the connection to this database for sessions:

A table will so be automatically created, named web2py_session_appname and will contain following fields:

If you want to use the file system for your sessions, you will need to use the following command to allow the session file release:

You will notice that this command must only be called if the action you want to execute do not require to session informations. For example, if you are loading dynamically some contents via Ajax calls on several parts of the page, you can add this command for each call to allow the concurrential execution knowing that the connection informations are saved while main page is loading.

As testing, you can use following code:

If you’re calling previous code by deleting the session.forget() command call, you will get this as a result:

If you’re calling the same code with the session.forget() command call, you will get:

We can notice that between both cases, we have a concurrential execution thanks to the session.forget() function, and that we can hardly optimize the page loading time.

Please note that most of browsers won’t allow you to execute more than 6 requests at the same time, hence the result we are getting with the last test where we can see that the six first requests are executed together whereas the following ones are executed afterwards (on a second flow but concurrent also).Avec une configuration par défaut de votre application Web2py, vous pourrez noter que lorsque vous lancez une action, si celle-ci prend un peu de temps à s’exécuter, vous ne pouvez pas ouvrir un nouvel onglet de votre navigateur pour exécuter une autre requête sur la même application. Ceci est dû au fait que lorsque vous exécutez une action, votre navigateur transmet vos informations de session au serveur et votre fichier de session côté serveur est donc ouvert en écriture pour être mis à jour. Un verrou est donc mis en place sur le fichier, empêchant toute autre action de démarrer tant que le verrou n’est pas lâché.

Ce problème ne se présente donc effectivement pas si vous utilisez un système de gestion des sessions sur une base de données et non sur un système de fichiers. Pour utiliser un système de bases de données, il vous faut pour une base de données déclarée :

initier la connexion sur cette base pour les sessions :

Une table va alors être automatiquement créée, sera appelée web2py_session_appname et contiendra les champs suivants :

Si vous souhaitez utiliser le système de fichiers de session, il vous faudra alors utiliser la commande suivante pour permettre de libérer ce fichier de session :

Notez bien que cette commande ne doit être appelée que si l’action exécutée ne nécessite pas d’informations de session. Par exemple, si vous chargez du contenu dynamiquement via des appels Ajax à différents endroits de la page vous pouvez ajouter cette commande pour chaque appel afin de permettre leur exécution concurrentielle sachant que les informations de connexion sont enregistrées sur le chargement de la page principale.

Pour tester, vous pouvez utiliser le code suivant :

Si vous appelez le code précédent en enlevant la commande session.forget() vous obtiendrez le résultat suivant :

Si vous appelez le même code en laissant la commande session.forget() vous obtiendrez alors :

On constate donc bien qu’entre les deux cas, nous avons une exécution concurrentielle fonctionnelle grâce à la fonction session.forget() et que la durée d’exécution de la page peut, de fait, être fortement optimisée.

Notez bien que la plupart des navigateurs ne permettra pas d’exécuter plus de 6 requêtes en même temps, d’où le résultat du dernier test où l’on constate que les 6 premières requêtes sont exécutées ensemble alors que les suivantes sont exécutées ensuite (sur un deuxième flot mais également en concurrence).

Question ? Contact