Heim >Java >javaLernprogramm >Verwendung der IPAddress-Java-Bibliothek mit ColdFusion zur Standardisierung von IPvamp; IPv-Adressen
Unser Microsoft IIS-Webserver ist so konfiguriert, dass er IPv4-Verbindungen akzeptiert, und seit 1996 zeichnen wir IPs in Datenbanken mit VARCHAR(15) auf. Als ARIN und der World IPv6 Launch Day 2012 die neuen IPv6-IP-Adressen einführten, waren wir davon nicht betroffen, da IPv6 in unserem Netzwerk nicht aktiviert ist. Alle eingehenden IPs der letzten 28 Jahre waren alle IPv4.
Im Laufe der Jahre haben wir einige Cloud-Drittanbieter genutzt, die IPv6 unterstützen und deren Protokolle IPv6-Adressen enthalten. Ich glaube, dass SendGrid, StackPath, Edgio und Fastly alle IPv6-Adressen protokollieren. (SendGrid hat einen alten Artikel aus dem Jahr 2016 mit dem Titel „Wo ist IPv6 in E-Mails?“ über die Verwendung mit SMTP.)
Während der IPv6-Verkehr zu unseren Servern über unseren cloudbasierten WAF-Anbieter weitergeleitet wird, können wir über den Forwarded-For-HTTP-Header auf die IPv6-IP zugreifen. Das bedeutet, dass die über CGI.REMOTE_ADDR verfügbare IPv4-Adresse zu unserem WAF-Anbieter gehört und nicht zum Blockieren oder Protokollieren verwendet werden sollte. Das IPv6 muss explizit mit getHttpRequestData(false) aus HTTP-Headern abgerufen werden. Wenn wir es als Zeichenfolge in der Datenbank speichern müssen, ist ein VARCHAR(45)-Datentyp erforderlich.
Ben Nadel veröffentlichte 2018 einen Artikel mit dem Titel „Checking To See If An IP v4 Address Is In A CIDR Range Using ColdFusion And SubnetUtils“, in dem er IPv4-Adressen mithilfe von java.net.InetAddress und java.math.BigInteger in eine Ganzzahl konvertierte Java-Klassen. Die Logik seiner ipAddressToInt UDF machte es uns leicht, zusätzlich die INT zu unserer Datenbank hinzuzufügen, um die Suche ohne Zeichenfolgen zu beschleunigen, aber bei Verwendung mit einer IPv6-IP-Adresse überschritt die Java-BIGINT-„Zeichenfolge“ die zulässigen Grenzwerte für eine SQL-BIGINT.
MSSQL BIGINT Max: 9.223.372.036.854.775.808 (und negative Werte)
ipAddressToInt("2a0d:5600:5b:9001:f6a4:817c:3bc6:2647"); // 55896819969464025771364933405273105991
Java BIGINT String: 55.896.819.969.464.025.771.364.933.405.273.105.991 (Whoa!)
Aufgrund des begrenzten SQL-Bereichs für BIGINT haben wir uns entschieden, eine Darstellung von IPv4- und IPv6-Zeichenfolgen mit BINARY(16) zu speichern. Dies sollte die Indizierung und Suche beschleunigen.
Eine String-zu-Binär- und Rückkonvertierungslösung über StackOverflow eignet sich gut für die Konvertierung, erfordert jedoch einen Zugriff auf die Remote-Datenbank, um eine Konvertierung durchzuführen, die lokal durchgeführt werden sollte.
Ich habe auch versucht, mithilfe von KI eine Funktion zum Konvertieren von IPv4 und IPv6 in Binärdateien zu schreiben, aber sie halluzinierte ständig, verwendete falsche Funktionen und konnte nicht liefern. (Es wurde weiterhin darauf bestanden, dass padLeft() eine CF-Funktion sei. Zu diesem Zeitpunkt war es ein völliger Fehlschlag.)
Ich wollte keinen zusätzlichen Aufwand haben oder für IP-Konvertierungen auf eine Microsoft SQL Server-Verbindung angewiesen sein. Eine kurze Suche ergab IPAddress, eine „Java-Bibliothek zur Handhabung von IP-Adressen und Subnetzen, sowohl IPv4 als auch IPv6“. Ich dachte, dass dies eine sichere Sache sei, da die Bibliothek von vielen Unternehmen wie Akamai, Amazon, Atlassian, AT&T, Cisco, Citibank, Comcast, Disney, Dell, Evernote, Google, Hulu, Netflix, Oracle, Proton-VPN usw. genutzt wird Es macht mir nichts aus, Java von Drittanbietern zur Erweiterung von ColdFusion zu verwenden, und diese Bibliothek scheint viele IP-bezogene Funktionen ausführen zu können, die derzeit nicht vorhanden sind. Die toNormalizedString()-Methode ist äußerst nützlich und wird zum Protokollieren von IPs mit konsistenter Formatierung verwendet.
Hier sind einige grundlegende CFML-Verwendungen mit der IPAddress IPAddressString-Klasse:
ipAddressString = createobject("java", "inet.ipaddr.IPAddressString"); ip = ipAddressString.init("2a0d:5600:5b:9001:f6a4:817c:3bc6:2647"); ipData = [ "isValid": ip.isValid(), "isIPAddress": ip.isIPAddress(), "isLoopback": ip.isLoopback(), "isIPv4": ip.isIPv4(), "isIPv6": ip.isIPv6(), "isMixedIPv6": ip.isMixedIPv6(), "toNormalizedString": ip.toNormalizedString() ]; writedump(var=ipData, label=ip);
https://gist.github.com/JamoCA/0e638da6927d341ed61e411f5789b4ec
Das obige ist der detaillierte Inhalt vonVerwendung der IPAddress-Java-Bibliothek mit ColdFusion zur Standardisierung von IPvamp; IPv-Adressen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!