Tìm địa chỉ IP của người dùng cho UID của họ?


8

Tôi đang chạy trang web Drupal 7 với trò chơi nhiều người chơi ở Nga và phải chặn một số người chơi rất khó chịu cứ sau 4-5 ngày.

Trước Drupal tôi đã sử dụng phpBB 3. Khi những người này đến từ một thành phố / làng nhỏ, tôi chỉ cần thêm mạng IP của họ vào các quy tắc tường lửa, để họ không thể đăng ký lại bằng một địa chỉ thư mới. Điều này hoạt động tốt trong trường hợp của tôi và câu hỏi của tôi không phải là về chính sách này.

Vấn đề của tôi là với Drupal, tôi không thể tìm thấy địa chỉ IP cuối cùng được sử dụng bởi id người dùng. Tức là kẻ lạm dụng được báo cáo cho tôi bởi những người dùng khác và tôi biết uid của anh ta, nhưng tôi không thể tìm thấy địa chỉ IP của anh ta trong nhật ký, bởi vì:

  1. Tôi đã kích hoạt nhật ký nhật ký hệ thống và xem các thông báo Drupal trong / var / log / messagess nhưng hiếm khi có thông báo về việc người dùng đăng nhập, có lẽ vì các phiên dài theo mặc định và tôi muốn giữ nó theo cách này người dùng thoải mái.

  2. Tôi cũng đã bật "ghi nhật ký cơ sở dữ liệu" nhưng không biết nơi nào để xem (bảng cơ sở dữ liệu nào).

Câu trả lời:


9

Nếu bạn đã bật mô-đun thống kê, bảng "accesslog" chứa IP cho tất cả khách truy cập của bạn.

SELECT hostname FROM accesslog WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

Nếu bạn không kích hoạt số liệu thống kê, tôi khuyên bạn nên bỏ nó đi, ngay cả đối với kết quả này, vì cho phép nó, gây ra một hình phạt hiệu suất nghiêm trọng.

Trong trường hợp đó, bạn có thể sử dụng sessionsbảng:

SELECT hostname FROM sessions WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

Lợi ích của cái đầu tiên so với cái sau, là cái đầu tiên sẽ luôn hiển thị cho bạn tên máy chủ mới nhất, trong khi cái sau có thể không luôn cập nhật.


Đúng, bảng phiên cũng có địa chỉ IP. Tôi chỉ không thể tìm thấy một số người dùng ở đó là tốt. Có lẽ đó là lỗi của tôi. Tôi sẽ chấp nhận câu trả lời của bạn và vô hiệu hóa các mô-đun thống kê cơ sở dữ liệu và cơ sở dữ liệu, vì chúng không được sử dụng nhiều cho tôi.
Alexander Farber

Người dùng không đăng nhập trong một thời gian sẽ không có phiên và sẽ không được tìm thấy. Như tôi đã nói "cái sau sẽ không luôn cập nhật", có nghĩa là: nó có thể không có tất cả người dùng.
berkes

5

Theo tôi biết, Drupal không báo cáo IP được người dùng sử dụng trong hồ sơ người dùng của họ. Bạn có thể tạo một mô-đun tùy chỉnh, xác minh IP được người dùng sử dụng và ghi lại nó trong bảng cơ sở dữ liệu của riêng bạn; sau đó bạn có thể hiển thị nó trong hồ sơ người dùng, cho người dùng có quyền (ví dụ: cho người dùng có quyền quản trị người dùng).

Hàm bạn cần là ip_address () , mà bạn có thể sử dụng khi triển khai hook_user_login () . Thực hiện hook_user_view () , sau đó bạn có thể hiển thị thông tin đó cho người dùng với sự cho phép đúng.


Cảm ơn bạn, nhưng sau đó tôi sẽ gặp vấn đề tương tự như bây giờ: người dùng hiếm khi đăng nhập, như tôi có thể thấy trong syslog. Và hook_user_login () chỉ được gọi khi người dùng đăng nhập (nhập mật khẩu của anh ta).
Alexander Farber

Bạn có thể buộc họ đăng nhập; nếu bạn làm trống bảng phiên, người dùng nên đăng nhập lại.
kiamlaluno

3

Nếu bạn đang sử dụng mô đun ghi nhật ký cơ sở dữ liệu, Drupal lưu trữ thông tin này trong bảng theo dõi, bên dưới hostnamecột. Bạn có thể viết các truy vấn tùy chỉnh để nhận thông tin này hoặc sử dụng mô-đun Xem Watchdog (hiện chỉ là bản phát hành dành cho 7.x, vì vậy tôi không chắc nó hoạt động tốt như thế nào trong Drupal 7) để hiển thị bảng đó cho Lượt xem.


Không, bảng watchdog không may gặp vấn đề tương tự như mô-đun lõi syslog: đối với một số người dùng tôi không có địa chỉ IP, vì họ đã đăng nhập từ lâu. Vì vậy, tôi nhận được báo cáo về một số người dùng độc hại, cố gắng tìm IP của anh ấy để thêm nó vào quy tắc thả tường lửa của tôi, nhưng tôi không thể tìm thấy IP của anh ấy ở bất cứ đâu.
Alexander Farber

Thật không may, cài đặt mặc định cho watchdog là chỉ giữ lại 1000 tin nhắn. Trên một trang web hoạt động, điều này có thể chỉ kéo dài một giờ hoặc ít hơn. Tùy thuộc vào trang web của bạn, bạn có thể muốn tăng số lượng đó (admin / config / Development / log) hoặc xây dựng giải pháp lưu trữ IP tùy chỉnh như được mô tả bởi kiamlaluno.
jhedstrom


-1

session_id () cung cấp cho bạn phiên id người dùng hiện tại cho dù anh ấy / cô ấy là khách hay thành viên.

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.