2016-06-21 13 views
10

Tôi phải triển khai giải pháp từ WinApp được viết bằng C# đến PHP. Tôi cần trích xuất số IP dựa trên số host name. Các mảnh dưới mã hoạt động hoàn hảo:PHP Nhận IP dựa trên tên máy chủ

IPHostEntry LocalHostIPEntry = Dns.GetHostEntry(hostname); 
IPAddress LocalHostIP = LocalHostIPEntry.AddressList[0]; 
string ipfromhost = LocalHostIP.ToString(); 

sự lựa chọn duy nhất tôi đã tìm thấy cho đến nay trong PHP là:

gethostbyname('hostname'); 

Nhưng đó trả về một khác nhau IP cho cùng một máy chủ so với mã C#. Hơn nữa, số IP trả về không chính xác. Nếu tôi kiểm tra máy chủ liên quan bằng cách sử dụng nslookup -IPaddress- thì tôi sẽ nhận được một tên máy chủ hoàn toàn khác.

gì đang xảy ra? Bạn có thể sử dụng phương pháp nào khác để tra cứu số IP của số host trên mạng bằng cách sử dụng PHP?

+0

Lỗi này có xảy ra với tất cả tên máy chủ bạn thử không? Bạn nói bạn đang ở trên mạng nội bộ, điều gì sẽ xảy ra khi bạn kiểm tra bên ngoài? Điều gì về gethostbynamel (được một danh sách nếu máy chủ lưu trữ có nhiều IP)? Ngoài ra, gethostbyname sử dụng thư viện giải quyết của hệ điều hành cơ bản (Linux/Windows) - không chắc chắn cách thức hoạt động của phiên bản C#. Cuối cùng, nếu bạn thấy rằng bạn đang truy vấn DNS không chính xác, có thư viện Pear cho rằng: http://pear.php.net/package/Net_DNS2 – lydiat

+0

Dường như nó có thể là một vấn đề cụ thể cho máy: bạn có thể thử cùng một mã (và 'nslookup') từ một máy khác trên cùng một mạng? Ngoài ra, từ một máy ảo hoặc phân phối Linux trực tiếp? – Viruzzo

+0

Đây có phải là chỉ để tìm kiếm DNS ngược hay bạn đang cố gắng để có được DNS chung? – Machavity

Trả lời

5

bạn có thể sử dụng php dns_get_record function

array dns_get_record (string $hostname [, int $type = DNS_ANY [, array &$authns [, array &$addtl [, bool &$raw = false ]]]]) 

Và sau đó tìm trong mảng cho một bản ghi loại A (có nghĩa là IPv4)

+0

Điều này trả về một mảng 'đa chiều 'chứa 2' mảng con'. Cả hai đều chứa một bản ghi loại 'A'. Cái đầu tiên là giống nhau (sai) như trong 'gethostbyname()'. Cái thứ hai cũng không chính xác. 'nslookup' không trả về bất cứ thứ gì cho nó. – fishmong3r

+1

lạ bạn muốn tìm tên máy chủ nào? có lẽ cài đặt dns của bạn bị hỏng? – fucethebads

+0

Nó chỉ là tên của một máy tính trên mạng công ty. Có lẽ vấn đề DNS, nhưng sau đó làm thế nào có thể là mã khác trả về giá trị chính xác? – fishmong3r

2

Có 2 giải pháp để có được máy chủ IP sử dụng 2 chức năng được xác định trước

$ip = gethostbyname('php.net'); 
echo $ip; 

$result = dns_get_record("php.net"); 
print_r($result); 

Sẽ làm việc khi bạn có quyền truy cập vào các trang web đó thông qua tường lửa của mình. nó bị chặn sau đó bạn sẽ thấy ip địa phương của bạn thay vì IP trang web mong muốn.

+0

tôi có thể sử dụng các chức năng tương tự trong C#.? họ sẽ làm việc.? – Developer

+0

tôi phải kiểm tra. –

+1

Bạn không thể sử dụng bất kỳ hàm C# nào trong PHP – Dharam

Các vấn đề liên quan