2016-11-09 3 views
0

Guten Tag.Wählen Sie eine ganze Reihe von IPs mit einer Aussage

Ich habe ein Problem mit einem Spammer, der meine Website für seine schmutzigen Zwecke benutzt. Die Spammer IP ist ähnlich wie 111.111.11.11 - komplett statisch mit Ausnahme der letzten beiden Nummern. Kann ich irgendwie den Bereich 00 - 99 in einer einzigen SQL-Abfrage?

Dies ist, wie ich weiß, dass ich mit ihm (keine Aktion im Beispiel) umgehen kann:

SELECT * FROM myTable WHERE ip = 111.111.11.00 
SELECT * FROM myTable WHERE ip = 111.111.11.01 
SELECT * FROM myTable WHERE ip = 111.111.11.02 
/* etc. */ 

Kann ich Wildcard irgendwie die letzten beiden Zahlen wie:

SELECT * FROM myTable WHERE ip = 111.111.11.?? 

oder Schleife durch eine wie (vorzugsweise direkt in phpMyAdmin) Bereich

SELECT * FROM myTable WHERE ip = 111.111.11.00 -> 111.111.11.99 

ich habe durch die MySQL-Referenz manu suchen al, aber ich bin mir nicht ganz sicher, wonach ich suche. Jede Hilfe wird sehr geschätzt.

Mit freundlichen Grüßen, Jimmy

EDIT: Die like -Operator war das, was ich suchte. Ein Wordpress-Plugin Glitch-Exploiter wird bekommen, was man verdient. Danke für alle Vorschläge!

+3

vielleicht der 'like' Operator? – SomeJavaGuy

Antwort

0
SELECT * FROM myTable WHERE ip BETWEEN '111.111.11.00' AND '111.111.11.99' 

oder

SELECT * FROM myTable WHERE ip LIKE '111.111.11.__' 
+0

Sie können überprüfen, ob dies auch für 3 Ziffern im letzten Oktett funktioniert: der Bereich ist 0-254, nicht 0-99 –

+1

@Gordon Linoff: Hilf mir; Ich sehe den Fehler in der ersten nicht. All diese zweistelligen Zahlen '00', '01', '02', ... sind im Bereich, nicht wahr? Wenn, anders als die Frage, sie eine Ziffer oder drei sein können, dann funktioniert keine Abfrage (aber 'WHERE ip LIKE '111.111.11.%' Würde). –

+0

@Jon Story: Das ist ein Tipp für das OP, oder? Er möchte ausdrücklich den Bereich '00' - '99' abdecken. Zumindest hat er uns das gesagt. –

0

Thorten des like ist der einfachste Weg, Ihr Problem zu behandeln. Wenn Sie einen allgemeineren Bereich haben, dann können Sie right() verwenden:

WHERE RIGHT(ip, 13) BETWEEN '111.111.11.00' AND '111.111.11.99' 
+0

Das funktioniert gut für 0-99 (also technisch korrekt für die Frage), aber eine IP kann 0-254 verwenden, und dies wird nicht funktionieren für> 99 –

+0

@JonStory Es scheint nicht notwendig zu sein als von jetzt. Nicht sicher, wie es funktioniert, aber die ersten 8 Zahlen bleiben gleich, und nur die beiden letzten variieren. –

1

Hier ist eine Idee. Beachten Sie, dass diese Lösung, wie geschrieben, keinen Index verwenden kann ...

SELECT * FROM my_table WHERE INET_ATON(ip) BETWEEN 1869548288 AND 1869548387; 
+0

wo 1869548288 und 1869548387 'INET_ATON (' 111.111.11.0 ')' und 'INET_ATON ('111.111.11.99')' sind. –

Verwandte Themen