Tôi đang sử dụng PHP CURL để gửi yêu cầu tới máy chủ. Tôi cần làm gì để phản hồi từ máy chủ sẽ bao gồm địa chỉ IP của máy chủ đó?Curl PHP, truy xuất Địa chỉ IP máy chủ
Trả lời
có thể được thực hiện với curl, với lợi thế là không có lưu lượng mạng khác ngoài yêu cầu/phản hồi cuộn tròn. Yêu cầu DNS được thực hiện bằng cách cuộn tròn để lấy địa chỉ ip, có thể tìm thấy trong báo cáo chi tiết. Vì vậy:
- Bật CURLOPT_VERBOSE.
- CURLOPT_STDERR trực tiếp vào một tài nguyên trình bao bọc luồng "php: // temp".
- Sử dụng preg_match_all(), phân tích cú pháp nội dung chuỗi của tài nguyên cho địa chỉ ip .
- Địa chỉ máy chủ phản hồi sẽ nằm trong ô con sốcủa mảng đối sánh.
- Địa chỉ của máy chủ phân phối nội dung (giả định yêu cầu thành công ) có thể được truy lục với kết thúc(). Bất kỳ địa chỉ nào trong số các địa chỉ của máy chủ cũng sẽ ở trong số phần phụ, theo thứ tự.
Demo:
$url = 'http://google.com';
$wrapper = fopen('php://temp', 'r+');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $wrapper);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$ips = get_curl_remote_ips($wrapper);
fclose($wrapper);
echo end($ips); // 208.69.36.231
function get_curl_remote_ips($fp)
{
rewind($fp);
$str = fread($fp, 8192);
$regex = '/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/';
if (preg_match_all($regex, $str, $matches)) {
return array_unique($matches[0]); // Array([0] => 74.125.45.100 [2] => 208.69.36.231)
} else {
return false;
}
}
AFAIK bạn không thể 'buộc' máy chủ gửi cho bạn địa chỉ IP của mình trong phản hồi. Tại sao không tìm kiếm trực tiếp? (Kiểm tra this question/answers for how to do that from php)
Tôi không nghĩ rằng có cách để lấy địa chỉ IP đó trực tiếp từ curl.
Nhưng một cái gì đó như thế này có thể làm các trick:
Thứ nhất, làm theo yêu cầu curl, và sử dụng curl_getinfo
để có được những "thực" URL đã được lấy - điều này là vì URL đầu tiên có thể chuyển hướng với nhau, và bạn muốn trận chung kết một:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
$real_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
var_dump($real_url); // http://www.google.fr/
Sau đó, sử parse_url
để trích xuất các "host" một phần từ URL đó cuối cùng:
$host = parse_url($real_url, PHP_URL_HOST);
var_dump($host); // www.google.fr
và, cuối cùng, sử dụng gethostbyname
t o có được địa chỉ IP tương ứng với chủ nhà rằng:
$ip = gethostbyname($host);
var_dump($ip); // 209.85.227.99
Vâng ...
Đó là một giải pháp ^^ Nó sẽ làm việc trong hầu hết các trường hợp, tôi cho rằng - mặc dù tôi không chắc chắn bạn sẽ luôn có được kết quả "chính xác" nếu có một số loại mecanism cân bằng tải ...
echo '<pre>';
print_r(gethostbynamel($host));
echo '</pre>';
Điều đó sẽ cung cấp cho bạn tất cả địa chỉ IP được liên kết với tên máy chủ đã cho.
Tôi sử dụng này một
<?
$hosts = gethostbynamel($hostname);
if (is_array($hosts)) {
echo "Host ".$hostname." resolves to:<br><br>";
foreach ($hosts as $ip) {
echo "IP: ".$ip."<br>";
}
} else {
echo "Host ".$hostname." is not tied to any IP.";
}
?>
từ đây: http://php.net/manual/en/function.gethostbynamel.php
Tôi nghĩ rằng bạn sẽ có thể để có được địa chỉ IP từ máy chủ với:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://stackoverflow.com");
curl_exec($ch);
$ip = curl_getinfo($ch,CURLINFO_PRIMARY_IP);
curl_close($ch);
echo $ip; // 151.101.129.69
- 1. Địa chỉ IP máy chủ hiển thị PHP
- 2. Cách sử dụng IP máy chủ khác với PHP/cURL?
- 3. Facebook API: Địa chỉ IP chặn các máy chủ Heroku
- 4. Truy xuất chỉ tiêu đề trong php qua curl
- 5. Nhận tên máy chủ từ địa chỉ IP
- 6. chuyển đổi địa chỉ IP thành tên máy chủ
- 7. Nhận địa chỉ IP của máy chủ trong ASP.NET?
- 8. Cách lấy địa chỉ IP của máy chủ?
- 9. Cách lấy địa chỉ IP của máy chủ ứng dụng
- 10. Cách lấy tên máy chủ dựa trên địa chỉ IP?
- 11. Chặn địa chỉ IP của máy chủ Appengine?
- 12. Trang web hiển thị khác với địa chỉ máy chủ cục bộ và địa chỉ IP
- 13. Vị trí địa lý dựa trên Địa chỉ IP - PHP
- 14. Địa chỉ IP bị khóa PHP
- 15. Làm cách nào để tìm địa chỉ IP của máy chủ của tôi bằng PHP (CLI)
- 16. SQL - Truy vấn để nhận địa chỉ IP của máy chủ
- 17. Hạn chế quyền truy cập vào máy chủ HTTP dựa trên Node.js theo địa chỉ IP
- 18. Gửi tiêu đề máy chủ khi truy cập địa chỉ IP trong Firefox
- 19. Sử dụng cURL với SNI (Chỉ dẫn tên máy chủ)
- 20. Chứng chỉ SSL có bị ràng buộc với địa chỉ IP của máy chủ không?
- 21. Mysql - kết nối với máy chủ từ xa bằng địa chỉ IP
- 22. Máy khách Windows Azure có địa chỉ IP 'XXX.XXX.XXX.XX' không được phép truy cập vào máy chủ
- 23. truy xuất thời gian chờ của máy chủ php
- 24. Đơn giản chỉ cần tìm ra địa chỉ IP của máy chủ
- 25. Truy xuất Tên miền thay vì IP
- 26. truy xuất ip và cổng từ sockaddr_storage
- 27. Cách nhận địa chỉ ip của khách hàng/người dùng?
- 28. trim địa chỉ ip octet
- 29. Tăng địa chỉ IP
- 30. localhost vs địa chỉ ip thực
máy chủ bao gồm nhiều phiên bản đang chạy, vì vậy tôi cần tìm ra chính xác máy chủ nào tôi đã kết nối và trả lời cho một yêu cầu CURL cụ thể. – Beier