« IPinfo » : différence entre les versions
mAucun résumé des modifications |
mAucun résumé des modifications |
||
Ligne 112 : | Ligne 112 : | ||
On tente donc un :<syntaxhighlight lang="bash"> | On tente donc un :<syntaxhighlight lang="bash"> | ||
curl -u $IPINFO_TOKEN: http://v6.ipinfo.io/ | curl -u $IPINFO_TOKEN: http://v6.ipinfo.io/95.142.161.196 | ||
</syntaxhighlight>Et on utilise tcpdump à la place de wireshark (mon serveur linux fait seulement de la ligne de commande).<syntaxhighlight lang="text"> | </syntaxhighlight><code>v6.ipinfo.io</code> est le DNS de l'ip V6 <code>AAAA</code> du service IPINFO. | ||
Et on utilise tcpdump à la place de wireshark (mon serveur linux fait seulement de la ligne de commande).<syntaxhighlight lang="text"> | |||
00:31:08.884049 IP6 xvm6-dc0-feaa-4fe7.ghst.net.34548 > 2600:1901:0:13e0::.http: Flags [S], seq 2678455541, win 64800, options [mss 1440,sackOK,TS val 3419243256 ecr 0,nop,wscale 7], length 0 | 00:31:08.884049 IP6 xvm6-dc0-feaa-4fe7.ghst.net.34548 > 2600:1901:0:13e0::.http: Flags [S], seq 2678455541, win 64800, options [mss 1440,sackOK,TS val 3419243256 ecr 0,nop,wscale 7], length 0 | ||
00:31:08.884775 IP6 2600:1901:0:13e0::.http > xvm6-dc0-feaa-4fe7.ghst.net.34548: Flags [S.], seq 549389614, ack 2678455542, win 65535, options [mss 1440,sackOK,TS val 1351958675 ecr 3419243256,nop,wscale 8], length 0 | 00:31:08.884775 IP6 2600:1901:0:13e0::.http > xvm6-dc0-feaa-4fe7.ghst.net.34548: Flags [S.], seq 549389614, ack 2678455542, win 65535, options [mss 1440,sackOK,TS val 1351958675 ecr 3419243256,nop,wscale 8], length 0 |
Version actuelle datée du 19 décembre 2024 à 23:39
Si vous désirez n'utiliser que 50 000 requetes par mois, c'est idéal!
On s'inscrit en donnant une simple adresse mail et on récupère un token.
export IPINFO_TOKEN="546425b91c438b" # c'est un exemple
La requête la plus simple :
curl "ipinfo.io/95.142.161.196?token=$IPINFO_TOKEN"
Donne la localisation de l'IP du serveur hébergeant ce wiki.
{
"ip": "95.142.161.196",
"hostname": "xvm-161-196.dc0.ghst.net",
"city": "Paris",
"region": "Île-de-France",
"country": "FR",
"loc": "48.8534,2.3488",
"org": "AS203476 GANDI SAS",
"postal": "75000",
"timezone": "Europe/Paris"
}
Hé oui je suis hébergé chez Gandi depuis plus de 10 ans et j'en suis très satisfait!
Authentification
Nous avons vu ci-dessus une méthode pour utiliser le token. En fait il y en a trois
# Avec Basic Auth user sans password
$ curl -u $IPINFO_TOKEN: ipinfo.io/95.142.161.196
# Avec Bearer token
$ curl -H "Authorization: Bearer $IPINFO_TOKEN" ipinfo.io/95.142.161.196
# Dans la query
$ curl ipinfo.io/95.142.161.196?token=$IPINFO_TOKEN
Les 3 nous donnent le même "json" en réponse.
Protocoles
Dans le cas ci dessus on ne précise pas le protocole. Par défaut c'est le http qui est utilisé par curl mais o peut également utiliser https.
#HTTP
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196
#HTTPS
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196
Les options
IPV4 ou IPV6
IPInfo sait indifféremment traiter des IP V4 ou V6.
#IP V4
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196
#IP V6
curl -u $IPINFO_TOKEN: http://ipinfo.io/2001:4b98:dc0:47:216:3eff:feaa:4fe7
C'est toujours le même serveur donc, la même réponse.
Adresse par defaut
Si on ne précise pas une IP c'est l'adresse IP du client telle qu'elle est vue par le serveur qui est utilisée.
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196
curl -u $IPINFO_TOKEN: http://ipinfo.io/
Donnent le même résultat si le client est 95.142.161.196
Filtrage de la réponse
On peut ne demander que certaines informations.
Si la requête globale :
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196
# Equivalant a la demande explicite
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/json
Réponds:
{
"ip": "95.142.161.196",
"hostname": "xvm-161-196.dc0.ghst.net",
"city": "Paris",
"region": "Île-de-France",
"country": "FR",
"loc": "48.8534,2.3488",
"org": "AS203476 GANDI SAS",
"postal": "75000",
"timezone": "Europe/Paris"
}
On peut ne demander que l'un des champs ci-dessus:
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/country
Nous réponds simplement:
FR
et
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/timezone
un simple :
Europe/Paris
Le "content-type"
IPInfo nous donne un content type qui correspond à notre demande.
curl -i -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/
curl -i -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/json
Les deux commandes nous renvoient un objet JSON et donc un content-type:
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
En revanche si on demande un champ spécifique.
curl -i -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/country
Réponds par :
HTTP/1.1 200 OK
content-type: text/html; charset=utf-8
Ce qui est étrange on s'attendrais à avoir un text/plain
mais non.
De la même façon on peut lui demander un format spécifique avec, par exemple, une option curl -H "Accept: application/json"
sur une requête /country
rien n'y fait le serveur IPInfo impose son format.
Requêtes en IPV6
Tous les exemples ci dessus ont été fait en IPV4 (même quand on demande le détail d'une adresse IPV6 la requête était faite en IPV4)
est le résultat dans Wireshark de la requête:
curl -u $IPINFO_TOKEN: http://ipinfo.io/2001:4b98:dc0:47:216:3eff:feaa:4fe7
On voit le GET /2001:4b98:dc0:47:216:3eff:feaa:4fe7 qui est bien la requête du détail d'une adresse IPV6 au travers de trames IPV4.
Pour faire une requête en IPV6 j'au dû passer sur une "vrai" machine linux. Le wsl de windows ne sait pas faire d'IPV6 (derrière un NAT V4 interne à windows)
On tente donc un :
curl -u $IPINFO_TOKEN: http://v6.ipinfo.io/95.142.161.196
v6.ipinfo.io
est le DNS de l'ip V6 AAAA
du service IPINFO.
Et on utilise tcpdump à la place de wireshark (mon serveur linux fait seulement de la ligne de commande).
00:31:08.884049 IP6 xvm6-dc0-feaa-4fe7.ghst.net.34548 > 2600:1901:0:13e0::.http: Flags [S], seq 2678455541, win 64800, options [mss 1440,sackOK,TS val 3419243256 ecr 0,nop,wscale 7], length 0
00:31:08.884775 IP6 2600:1901:0:13e0::.http > xvm6-dc0-feaa-4fe7.ghst.net.34548: Flags [S.], seq 549389614, ack 2678455542, win 65535, options [mss 1440,sackOK,TS val 1351958675 ecr 3419243256,nop,wscale 8], length 0
00:31:08.884804 IP6 xvm6-dc0-feaa-4fe7.ghst.net.34548 > 2600:1901:0:13e0::.http: Flags [.], ack 1, win 507, options [nop,nop,TS val 3419243257 ecr 1351958675], length 0
00:31:08.884957 IP6 xvm6-dc0-feaa-4fe7.ghst.net.34548 > 2600:1901:0:13e0::.http: Flags [P.], seq 1:134, ack 1, win 507, options [nop,nop,TS val 3419243257 ecr 1351958675], length 133: HTTP: GET /95.142.161.196 HTTP/1.1
00:31:08.885610 IP6 2600:1901:0:13e0::.http > xvm6-dc0-feaa-4fe7.ghst.net.34548: Flags [.], ack 134, win 1054, options [nop,nop,TS val 1351958676 ecr 3419243257], length 0
00:31:08.987450 IP6 2600:1901:0:13e0::.http > xvm6-dc0-feaa-4fe7.ghst.net.34548: Flags [P.], seq 1:629, ack 134, win 1054, options [nop,nop,TS val 1351958778 ecr 3419243257], length 628: HTTP: HTTP/1.1 200 OK
00:31:08.987501 IP6 xvm6-dc0-feaa-4fe7.ghst.net.34548 > 2600:1901:0:13e0::.http: Flags [.], ack 629, win 503, options [nop,nop,TS val 3419243360 ecr 1351958778], length 0
00:31:08.988075 IP6 xvm6-dc0-feaa-4fe7.ghst.net.34548 > 2600:1901:0:13e0::.http: Flags [F.], seq 134, ack 629, win 503, options [nop,nop,TS val 3419243360 ecr 1351958778], length 0
00:31:08.988789 IP6 2600:1901:0:13e0::.http > xvm6-dc0-feaa-4fe7.ghst.net.34548: Flags [F.], seq 629, ack 135, win 1054, options [nop,nop,TS val 1351958779 ecr 3419243360], length 0
00:31:08.988818 IP6 xvm6-dc0-feaa-4fe7.ghst.net.34548 > 2600:1901:0:13e0::.http: Flags [.], ack 630, win 503, options [nop,nop,TS val 3419243361 ecr 1351958779], length 0
Conclusion
On a bien des requêtes IPV6 : IP6 xvm6-dc0-feaa-4fe7.ghst.net.50978 > 2600:1901:0:13e0::.http
qui transportent un GET /95.142.161.196
pour avoir les infos d'une adresse IPV4.
Donc la base de donnée interrogée contient les adresses IP V4 comme les adresses IPV6 et le protocole de requête peut être du http
et du https
sur des trames IPV4 ou IPV6 de façon indifférenciée.
Cette API est très simple, limitée à 50 000 req/mois sans avoir a commencer a payer.