正好我做了一个试验,不过只能查询国际域名,国内域名不知道是否支持whois协议,C源代码如下,PHP就只能你自己研究了:#include "stdafx.h"
#include <stdlib.h>
#include <winsock.h>int main(int argc, char* argv[])
{
SOCKET sock;
struct sockaddr_in server;
struct hostent *hp;
char buf[1025];
WORD wVersion;
WSADATA wsaData;
int err;
int iRecv;
char domain[1024]; if (argc<2){
printf("Use \n CsWhois  DomainName\n\n");
return 0;
}
strcpy(domain,argv[1]);
strcat(domain,"\n");
wVersion = MAKEWORD(2,0);  //版本号
err=WSAStartup(wVersion,&wsaData); //初始化
sock = socket(AF_INET,SOCK_STREAM,0); //定义一个Socket
if(sock<0){ //出错处理
perror("opening stream socket");
return 1;
}
server.sin_family = AF_INET;
hp = gethostbyname("whois.networksolutions.com");
if (hp==0){
fprintf(stderr,"%s Unknow host \n",argv[1]);
return 2;
}
memcpy((char *)&server.sin_addr,(char *)hp->h_addr ,hp->h_length);//构造服务器地址
server.sin_port=htons(43); //构造服务器端口
if (connect(sock,(struct sockaddr *)&server,sizeof(server))<0){ //连接
perror("connect stream socket!");
return 3;
}
if (send(sock,domain,lstrlen(domain),MSG_DONTROUTE)<0){//发送
perror("sending on stream socket!");
return 4;
}

iRecv=recv(sock,buf,1024,0);//接收
while(iRecv>0){
buf[iRecv]='\0';
printf("%s\n",buf);
iRecv=recv(sock,buf,1024,0);
if( iRecv== SOCKET_ERROR) {
break;
}
}
closesocket(sock);//关闭
WSACleanup();//清除
return 0;
}