uses
  winsock;
function GetComputerName(IP:string):string;
var
  HostEnt:PHostEnt;
  WSAData:TWSADATA;
  Addr:DWORD;
begin
  WSAStartup($101, WSAData);
  Addr:=inet_addr(PChar(IP));
  HostEnt:=gethostbyaddr(@Addr,sizeof(Addr),PF_INET);
  Result:=HostEnt.h_name;
  WSACleanup();
end;

解决方案 »

  1.   

    to qiubolecn(来自差生市):你得到是计算机名称啊,不是操作系统类型(98/NT/2000/XP)哦
    我建议z_x_b同志去黑客网站上去问问:)
      

  2.   

    可能要用到SNMP
    但是具体我也不知道
    如果你有答案的话
    EMAIL TO ME
    TKS
    [email protected]
      

  3.   

    晕,没看清题目得知对方操作系统的类型是属于网络探测目前的技术:利用TCP/IP堆栈指纹的方法,也叫Overview。其实也是一种溢出(溢出的作用还真是大,扫描,攻击都用得着)。利用网络操作系统里的TCP/IP堆栈作为特殊的“指纹”来确定系统的真正身份。这种的准确性相当高,因为再精明的管理员都不太可能去修改系统底层的网络的堆栈参数。目前,利用这种技术实现的工具很多,比较著名有NMAP,CHECKOS,QUESO等。不过他们实现的手段主要还是三种。 
      1.利用用FIN探测:通过向目标机发送一个FIN的包(或者是任何没有ACK或SYN标记的包)到目标主机的一个开放的端口然后等待回应。许多系统如MS-WINDOWS,BSDI,CISCO, HP/UX,MVS和IRIX会返回一个RESET(复位标记)。利用BOGUS标记探测:通过发送一个SYN包,它含有没有定义的TCP标记的TCP头。那么在LINUX系统的回应任就会包含这个没有定义的标记,而在一些别的系统则会在收到SYN+BOGU包之后关闭连接。利用这些特性,可以区分一些操作系统。 
      2.利用TCPISN采样:这是利用寻找初始化序列规定长度与特定的操作系统相匹配的方法。利用它可以对许多系统分类,如较早的UNIX系统是64K长度。一些新的UNIX系统则是随机增长的长度(Solaris,IRIX,FreeBSD,DigitalUnix,Cray等)使用Don"tFragment位:许多操作系统在发送的包里使用这个位,由此可以确定操作系统的类型。 
      3.利用TCP的初始化窗口:在这里只是简单地检查返回包里包含的窗口长度。这项技术根据各个操作系统的不同的初始化窗口大小来唯一确定它们。 用DELPHI来写没试过
      

  4.   

    function GetOSInfo : String;
    begin
      Result := '';
      case Win32Platform of
      VER_PLATFORM_WIN32_WINDOWS: Result := 'Windows 95/98';
      VER_PLATFORM_WIN32_NT: Result := 'Windows NT';
      else
      Result := 'Windows32';
      end;
    end;
      

  5.   

    to cszhz(丑小鸭) :你的只是得到本机而不是远程的os呀.
      

  6.   


    大侠们的意见是扫描攻击,
    你认为呢?
    www.2600.com
      

  7.   

    我已经知道远程DOWN掉98/2000主机的方法,只是想找到一个简单些的方法来确定对方使用什么操作系统,以免做无用功(DOWN 98和2000的方法不同),所以……
    谁知道,我将用测试通过的原码交换!
      

  8.   

    to pdsinfo(新手)你说的对
    ^_^