Die API unterstützt beide Protokolle (IPv4 und IPv6). Die Seite und die API werden immer kostenlos, werbefrei und nett sein und ewig weiterexistieren.
Wird ermittelt …
AnleitungWas ist ipy.ch?
Was genau ist eine IP-Adresse?
Warum ist die Unterscheidung wichtig?
In deinem Heimnetz hat jedes Gerät eine private IP-Adresse, meist vom Router vergeben. Gegenüber dem Internet trittst du dagegen mit einer öffentlichen IP-Adresse auf. Genau diese zeigt dir ipy.ch.
Standort und Datenschutz
Viele Dienste schätzen anhand der IP-Adresse, von wo aus du dich verbindest. Das hilft bei lokalisierten Angeboten, wirft aber auch Datenschutzfragen auf. Mit einem VPN verbirgst du deine echte Adresse und trittst mit der des VPN-Servers auf. Mit ipy.ch kannst du prüfen, ob das wirklich klappt. Wichtig: Wir speichern oder protokollieren absolut keine Daten von dir – weder deine IP-Adresse noch sonstige Informationen.
IPv4 vs. IPv6
203.0.113.7) ist das ursprüngliche Protokoll, stösst aber an seine Kapazitätsgrenzen: Es gibt nur rund 4,3 Milliarden Adressen. IPv6 (z. B. 2001:db8::1) ist der neue Standard, der jedem Gerät weltweit eine eigene Adresse geben kann. ipy.ch fragt beide getrennt ab und markiert die Adresse, die dein Browser bevorzugt.Warum wird manchmal keine IPv6 gefunden?
Manche Internetanbieter, Router und VPN-Dienste unterstützen IPv6 noch nicht vollständig, oder dein Gerät oder Router ist nicht dafür eingerichtet. Dann läuft deine Verbindung ausschliesslich über IPv4. Das ist kein Fehler, nur weniger zukunftssicher.
Funktioniert mein VPN?
Abhilfe: IPv6 in der VPN-App einschalten (manche nennen es «IPv6-Leak-Schutz») oder IPv6 am Gerät abschalten, solange das VPN läuft.
Teilt mein Anbieter meine IPv4-Adresse? (CGNAT)
100.64.0.0 bis 100.127.255.255 anzeigt statt der Adresse, die du hier siehst.Folge: Portweiterleitungen und Fernzugriff von aussen funktionieren über IPv4 nicht, über IPv6 meist schon. Viele Anbieter vergeben auf Anfrage eine eigene öffentliche IPv4.
Was bedeuten «Rechnername» und «Netz»?
Unter Netz steht das autonome System (AS), zu dem deine Adresse gehört – also welcher Anbieter oder welches Rechenzentrum sie ins Internet bringt – und das Land, in dem dieses Netz registriert ist. Das ist nicht unbedingt dein Standort.
Für den Rechnernamen fragt unser Server das DNS ab. Die Zuordnung zum Netz kommt aus einer lokalen Datenbank auf unserem Server (iptoasn.com), ohne Anfrage an Dritte.
API
api.ipy.ch antwortet mit der Adresse, über die du gerade verbunden bist (IPv4 oder IPv6). api4.ipy.ch ist nur über IPv4 erreichbar, api6.ipy.ch nur über IPv6 – so kannst du gezielt ein Protokoll erzwingen.| API-URL | Antwort | Beispiel (IPv4) | Beispiel (IPv6) |
|---|---|---|---|
| https://api.ipy.ch | text | 203.0.113.7 | 2001:db8::1 |
| https://api4.ipy.ch | text | 203.0.113.7 | – |
| https://api6.ipy.ch | text | – | 2001:db8::1 |
| https://api.ipy.ch?format=json | json | {"ip":"203.0.113.7"} | {"ip":"2001:db8::1"} |
| https://api.ipy.ch?format=jsonp | jsonp | /**/callback({"ip":"203.0.113.7"}); | /**/callback({"ip":"2001:db8::1"}); |
| https://api.ipy.ch?format=jsonp&callback=getip | jsonp | /**/getip({"ip":"203.0.113.7"}); | /**/getip({"ip":"2001:db8::1"}); |
| https://api.ipy.ch?format=json&info=1 | json | {"ip":"203.0.113.7","version":4,"asn":64496,…} | {"ip":"2001:db8::1","version":6,"asn":64496,…} |
Parameter
- format
text(Standard),jsonoderjsonp.- callback
- Name der Funktion bei
jsonp(Standardcallback; Buchstaben, Ziffern,_,$und Punkt, höchstens 128 Zeichen). - info
1liefert zusätzlichversion,ptr,ptr_verified,asn,as_name,as_country, bei IPv6 aucheui64undspecial. Etwas langsamer, weil der Server das DNS abfragt.
Statuscodes
- 200
- Alles in Ordnung.
- 400
- Ungültiges
formatoder ungültigercallback. - 405
- Andere Methode als GET, HEAD oder OPTIONS.
- 422
- Falsche Adressfamilie, z. B.
api4.ipy.chper IPv6 erreicht.ipist dann leer.
Gut zu wissen
- Die Textantwort endet ohne Zeilenumbruch.
- CORS ist offen (
Access-Control-Allow-Origin: *):fetch()funktioniert von jeder Webseite aus. - Nur HTTPS – Anfragen über HTTP werden umgeleitet.
- Antworten werden nie zwischengespeichert (
Cache-Control: no-store). - Maschinenlesbare Beschreibung: openapi.json (OpenAPI 3.1).
Beispiele
#!/usr/bin/env bash
ip=$(curl -s https://api.ipy.ch)
echo "Meine öffentliche IP-Adresse lautet: $ip"
ip4=$(curl -s https://api4.ipy.ch)
echo "Meine öffentliche IPv4-Adresse lautet: $ip4"
ip6=$(curl -s https://api6.ipy.ch)
echo "Meine öffentliche IPv6-Adresse lautet: $ip6"# Benötigt die Bibliothek requests (pip install requests)
import requests
ip = requests.get("https://api.ipy.ch", timeout=5).text
print("Meine öffentliche IP-Adresse lautet:", ip)const res = await fetch("https://api.ipy.ch?format=json");
const { ip } = await res.json();
console.log("Meine öffentliche IP-Adresse lautet:", ip);// Node.js 18+, als .mjs-Datei speichern (top-level await)
const res = await fetch("https://api.ipy.ch");
console.log("Meine öffentliche IP-Adresse lautet:", await res.text());<script>
function getIP(json) {
document.body.append("Meine öffentliche IP-Adresse lautet: " + json.ip);
}
</script>
<script src="https://api.ipy.ch?format=jsonp&callback=getIP"></script>$.getJSON("https://api.ipy.ch?format=json", function (json) {
$("#ip").text("Meine öffentliche IP-Adresse lautet: " + json.ip);
});$ip = Invoke-RestMethod https://api.ipy.ch
"Meine öffentliche IP-Adresse lautet: $ip"<?php
$ip = file_get_contents('https://api.ipy.ch');
echo 'Meine öffentliche IP-Adresse lautet: ' . $ip . PHP_EOL;package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, err := http.Get("https://api.ipy.ch")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
ip, _ := io.ReadAll(resp.Body)
fmt.Printf("Meine öffentliche IP-Adresse lautet: %s\n", ip)
}// Benötigt die Crates reqwest und tokio
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let ip = reqwest::get("https://api.ipy.ch").await?.text().await?;
println!("Meine öffentliche IP-Adresse lautet: {}", ip);
Ok(())
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.ipy.ch")).build();
String ip = client.send(request, HttpResponse.BodyHandlers.ofString()).body();
System.out.println("Meine öffentliche IP-Adresse lautet: " + ip);
}
}import java.net.URI
fun main() {
val ip = URI("https://api.ipy.ch").toURL().readText()
println("Meine öffentliche IP-Adresse lautet: $ip")
}using var http = new HttpClient();
string ip = await http.GetStringAsync("https://api.ipy.ch");
Console.WriteLine($"Meine öffentliche IP-Adresse lautet: {ip}");Imports System.Net.Http
Module Program
Sub Main()
Using http As New HttpClient()
Dim ip As String = http.GetStringAsync("https://api.ipy.ch").Result
Console.WriteLine("Meine öffentliche IP-Adresse lautet: {0}", ip)
End Using
End Sub
End Module// Benötigt libcurl (z. B. g++ main.cpp -lcurl)
#include <iostream>
#include <string>
#include <curl/curl.h>
static size_t write_cb(char *data, size_t size, size_t n, void *out) {
static_cast<std::string *>(out)->append(data, size * n);
return size * n;
}
int main() {
CURL *curl = curl_easy_init();
if (!curl) return 1;
std::string ip;
curl_easy_setopt(curl, CURLOPT_URL, "https://api.ipy.ch");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_cb);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ip);
CURLcode rc = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (rc != CURLE_OK) return 1;
std::cout << "Meine öffentliche IP-Adresse lautet: " << ip << std::endl;
return 0;
}import Foundation
let url = URL(string: "https://api.ipy.ch")!
let (data, _) = try await URLSession.shared.data(from: url)
print("Meine öffentliche IP-Adresse lautet:", String(decoding: data, as: UTF8.self))NSError *error = nil;
NSURL *url = [NSURL URLWithString:@"https://api.ipy.ch"];
NSString *ip = [NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding
error:&error];
if (ip) {
NSLog(@"Meine öffentliche IP-Adresse lautet: %@", ip);
} else {
NSLog(@"%@", error);
}require "net/http"
ip = Net::HTTP.get(URI("https://api.ipy.ch"))
puts "Meine öffentliche IP-Adresse lautet: #{ip}"# Für HTTPS zusätzlich LWP::Protocol::https installieren
use strict;
use warnings;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new(timeout => 5);
my $ip = $ua->get('https://api.ipy.ch')->decoded_content;
print "Meine öffentliche IP-Adresse lautet: $ip\n";Öffentliche IP-Adresse
Die wichtigsten Fakten auf einen Blick:
- Zuweisung: Dein Internetanbieter weist deinem Router automatisch eine öffentliche IP zu.
- Einzigartigkeit: Jede öffentliche Adresse existiert im Internet zur selben Zeit nur einmal (Ausnahme: CGNAT, siehe oben).
- Sichtbarkeit: Jeder Webserver sieht deine öffentliche IP, sonst wüsste er nicht, wohin er die Antwort schicken soll.
- Abgrenzung: Bei IPv4 teilen sich alle Geräte bei dir zu Hause eine öffentliche Adresse. Bei IPv6 bekommt meist jedes Gerät eine eigene.
Ohne öffentliche IP-Adresse wäre keine Kommunikation mit Diensten ausserhalb deines Heimnetzes möglich.
Öffentliche IP unter Windows (PowerShell) abfragen
PS C:\> Invoke-RestMethod https://api.ipy.ch
203.0.113.7Öffentliche IP unter macOS (Terminal) abfragen
$ curl -s https://api.ipy.ch; echo
203.0.113.7
$ curl -s https://api6.ipy.ch; echo
2001:db8::1Öffentliche IP unter Linux (Terminal) abfragen
$ curl -s https://api4.ipy.ch; echo
203.0.113.7
$ curl -s https://api6.ipy.ch; echo
2001:db8::1Lokale IP-Adresse
192.168.1.23). Sie stammt aus den reservierten Adressbereichen und ist von aussen nicht erreichbar.Früher konnten Webseiten sie über WebRTC auslesen, sogar hinter einem VPN – Heise hat darüber berichtet. Heute ersetzen Chrome, Edge, Safari und Firefox sie durch einen Zufallsnamen wie 3f1c….local (mDNS). Steht oben «verborgen», schützt dich dein Browser also wie vorgesehen.
Deine lokale Adresse findest du selbst ganz einfach:
Unter Windows steht sie bei «IPv4-Adresse»
C:\> ipconfig
Ethernet-Adapter Ethernet:
Verbindungsspezifisches DNS-Suffix: home
IPv6-Adresse. . . . . . . . . . . : 2001:db8:1234:5678::23
Verbindungslokale IPv6-Adresse . : fe80::1c2b:3a4d:5e6f:7a8b%12
IPv4-Adresse . . . . . . . . . . : 192.168.1.23
Subnetzmaske . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . : 192.168.1.1Unter macOS (WLAN meist en0, Kabel oft en1)
$ ipconfig getifaddr en0
192.168.1.23Unter Linux steht sie neben der Schnittstelle (hier eth0)
$ ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 192.168.1.23/24 2001:db8:1234:5678::23/64 fe80::1c2b:3aff:fe4d:5e6f/64To-do
- GraphQL-API-Endpunkt hinzufügen
- Mehr Anwendungsbeispiele