logging attckers try and add location to admin

This commit is contained in:
Parsa Nazer
2025-02-21 01:08:46 +03:30
parent 7679e82fd3
commit c7524e9e63
12 changed files with 395 additions and 16 deletions
+43 -1
View File
@@ -198,4 +198,46 @@ class PushSubscription(models.Model):
}
)
except WebPushException as ex:
print(f"Failed to send notification to {sub.user}:", ex)
print(f"Failed to send notification to {sub.user}:", ex)
def get_location_from_ip(ip_address):
try:
response = requests.get(f"http://ip-api.com/json/{ip_address}")
data = response.json()
if data["status"] == "success":
return data['country'], data['regionName'], data['city'], data.get('zip', 'ناموجود'), data['lat'], data['lon'], data['isp']
else:
print("Error fetching data: ", data["message"])
return None
except Exception as e:
print(f"An error occurred: {e}")
return None
class SecurityBreachAttemptModel(models.Model):
ip = models.CharField(max_length=40, unique=True, verbose_name="آدرس آی‌پی")
country = models.CharField(max_length=40, verbose_name="کشور", blank=True, null=True)
region_name = models.CharField(max_length=40, verbose_name="منطقه", blank=True, null=True)
city = models.CharField(max_length=40, verbose_name="شهر", blank=True, null=True)
zip_code = models.CharField(max_length=40, verbose_name="کد پستی", blank=True, null=True)
lon = models.CharField(max_length=40, verbose_name="طول جغرافیایی", blank=True, null=True)
lat = models.CharField(max_length=40, verbose_name="عرض جغرافیایی", blank=True, null=True)
isp = models.CharField(max_length=40, verbose_name="ارائه‌دهنده اینترنت (ISP)", blank=True, null=True)
viewd = models.BooleanField(default=False, verbose_name='تماشا شده')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='شروع حمله')
trys = models.IntegerField(default=0, verbose_name='تعداد تلاش ها')
def save(self, *args, **kwargs):
if not self.id:
location_data = get_location_from_ip(self.ip)
if location_data:
self.country, self.region_name, self.city, self.zip_code, self.lat, self.lon, self.isp = location_data
super().save(*args, **kwargs)
def __str__(self):
return f'تلاش نفوذ از {self.ip} در {self.city}, {self.country}'
class Meta:
verbose_name = "تلاش نفوذ"
verbose_name_plural = "تلاش‌های نفوذ"