一、由域名求IP地址的程序
下面程序由命令行輸入域名,輸出ip
import java.net.*;
public class nslookup {
//Usage:java nslookup hostname
public static void main (String argv[]) throws Exception {
String host=argv[0];
InetAddress address=null;
try {
address=InetAddress.getByName(host);
} catch(UnknownHostException e) {
System.out.println("Unknown host");
System.exit(0);
}
byte[] ip=address.getAddress();
for (int i=0;i< ip.length;i++) {
if (i>0) System.out.print(".");
System.out.print(ip[i]&0xff);
}
System.out.println();
}
}
程序運行結果:
C:\java>java nslookup sina.com
71.5.7.138
C:\java>
二、 得到某個域名的所有IP地址
import java.net.*;
import java.io.*;
public class SimpleDNS
{
public static void main(String[] args)
{
try
{
InetAddress[] address =InetAddress.getAllByName("www.sina.com");
for(int i=0;i< address.length;i++)
{
System.out.println(address[i].getHostAddress());
}
}
catch (Exception e)
{
System.out.println(e.toString());
System.exit(1);
}
}
}
?
運行結果:
C:\java>java SimpleDNS www.s
218.30.13.35
218.30.13.36
218.30.13.37
218.30.13.38
218.30.13.39
218.30.13.40
218.30.13.41
218.30.13.42
218.30.13.43
218.30.13.44
218.30.13.45
218.30.13.46
218.30.13.47
218.30.13.48
218.30.13.49
218.30.13.34
三、 IP地址轉換成10進制整數
經常要判斷一個ip是國內的還是國外的,有了下面程序再結合數據庫查詢...
public class IP
{
private static long ipToLong(String strIP)
//將127.0.0.1 形式的IP地址轉換成10進制整數,這里沒有進行任何錯誤處理
{
int j=0;
int i=0;
long [] ip=new long[4];
int position1=strIP.indexOf(".");
int position2=strIP.indexOf(".",position1+1);
int position3=strIP.indexOf(".",position2+1);
ip[0]=Long.parseLong(strIP.substring(0,position1));
ip[1]=Long.parseLong(strIP.substring(position1+1,position2));
ip[2]=Long.parseLong(strIP.substring(position2+1,position3));
ip[3]=Long.parseLong(strIP.substring(position3+1));
return (ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];
}
private static String longToIP(long longIP)
//將10進制整數形式轉換成127.0.0.1形式的IP地址
{
StringBuffer sb=new StringBuffer("");
sb.append(String.valueOf(longIP>>>24));//直接右移24位
sb.append(".");
??????????//將高8位置0,然后右移16位
sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16));
sb.append(".");
sb.append(String.valueOf((longIP&0x0000FFFF)>>>8));
sb.append(".");
sb.append(String.valueOf(longIP&0x000000FF));
sb.append(".");
return sb.toString();
}
public static void main(String[] args)
{
System.out.println("IP地址的各種表現形式:\r\n");
System.out.print("32位二進制形式:");
System.out.println(Long.toBinaryString(3526601384L));
System.out.print("十進制形式:");
System.out.println(ipToLong("210.51.170.168"));
System.out.print("普通形式:");
System.out.println(longToIP(3526601384L));
}
}
程序運行結果:
IP地址的各種表現形式:
32位二進制形式:11001010011100000110000010100011
十進制形式:3396362403
普通形式:202.112.96.163.