logging attckers try and add location to admin
This commit is contained in:
@@ -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 = "تلاشهای نفوذ"
|
||||
Reference in New Issue
Block a user