2016-07-09 10 views
1

Ich habe mehrere Hardware-Geräte, die Mini-Webserver enthalten, die, weil sie DHCP verwenden, jede IP-Adresse in der lokalen Domäne haben können.Wie bekomme ich eine IP-Adresse in iOS 9 mit NSURLSession Klasse

Ich benutze NSURLSession, um durch den Bereich der IP-Adressen .2 bis .253 zu versuchen, eine index.html, die diese Geräte hosten.

Das funktioniert gut, solange ich App Transport Security ausgeschaltet habe, natürlich, sobald ich es einschalte, scheitern die Anrufe, weil es IP-Adressenverbindungen nicht erlaubt.

Gibt es überhaupt etwas zu tun, kurz ATS zu verlassen und beten Apple erlaubt mir durch, wenn ich die Notwendigkeit erkläre?

Ein bisschen Pseudo-Code :)

App figures out its own IP address say 192.168.0.10 
for i in 2..<254 { 
    creates a new ip address of 192.168.0.2, .3, .4 etc etc 
    NSURLSession to https://above IP address/index.html 
    if (succeeds) { 
     I found a device 
    } 
} 

Schalten Sie ATS und dies wird nicht mehr

+1

Sie müssen ATS deaktivieren und erklären warum. Persönlich denke ich, dass Apple ziemlich nachsichtig sein muss, wenn es darum geht, die ATS-Anforderungen durchzusetzen, da es eine Menge eingebetteter und IoT-Geräte gibt, die TLS niemals mit entsprechenden Zertifikaten unterstützen werden. Sie werden auch mit der Anforderung umgehen müssen, dass Ihre App in reinen IPv6-Netzwerken korrekt funktioniert ... – Paulw11

+0

Sie könnten immer einen Server haben, der den Scan für Sie durchführt und eine Liste mit gültigen IP-Adressen verwaltet. Stellen Sie dann eine Verbindung zu diesem Server über HTTPS her und lassen Sie sich die IP zurückgeben, bei der das Gerät gefunden wurde + die Seite index.html. – Brandon

+0

Die Server-Idee ist eine gute, aber dies ist für ein kleines Unternehmen gedacht, ein iPad und möglicherweise mehrere Pin-Pads zu verwenden, so dass sie nicht diese zusätzlichen Kosten/Ärger haben wollen. –

Antwort

0

Sicher erlaubt. Sie können HTTPS mit einem selbstsignierten Zertifikat für die IP-Adresse verwenden und dem Benutzer dann die Möglichkeit geben, entweder zulässige Schlüssel oder zulässige benutzerdefinierte Stammzertifikate (Ihre Wahl) einzufügen, und dann override TLS chain validation in einer Weise, die automatisch Antworten akzeptiert, die entweder A Übergeben Sie die normalen Cert-Prüfungen, oder stimmen Sie mit den angegebenen Schlüsseln überein oder werden sie von diesen Wurzelzertifikaten signiert.

Ich sage nicht, dass das trivial ist, aber es kann getan werden.

Mit dem gesagt, Sie sollten wirklich nicht ein solches Netzwerk prüfen. Sie sollten Service Discovery verwenden. Das wird nicht mit dem Zertifikat Problem helfen, aber es wird Ihre App viel weniger wahrscheinlich für das Missbrauch des LAN abgelehnt werden. :-)