# Squid uses X-Forwarded-For, others use X-Real-Ip
self.remote_ip = self.headers.get(
"X-Real-Ip", self.headers.get("X-Forwarded-For", remote_ip))
+ if not self.__valid_ip(self.remote_ip):
+ self.remote_ip = remote_ip
# AWS uses X-Forwarded-Proto
self.protocol = self.headers.get(
"X-Scheme", self.headers.get("X-Forwarded-Proto", protocol))
args = ", ".join(["%s=%r" % (n, getattr(self, n)) for n in attrs])
return "%s(%s, headers=%s)" % (
self.__class__.__name__, args, dict(self.headers))
+
+ def __valid_ip(self, ip):
+ try:
+ address = socket.inet_pton(socket.AF_INET, ip)
+ except socket.error:
+ try:
+ address = socket.inet_pton(socket.AF_INET6, ip)
+ except socket.error:
+ return False
+
+ return True