JAVA如何获取局域网内所有安卓设备的ip地址,MAC以及序列号?

JAVA如何获取局域网内所有安卓设备的ip地址,MAC以及序列号?,第1张

1得到局域网网段,可由自己机器的IP来确定 (也可以手动获取主机IP-CMD-ipconfig /all)

2根据IP类型,一次遍历局域网内IP地址

JAVA类,编译之后直接运行便可以得到局域网内所有IP,具体怎样使用你自己编写相应代码调用便可

代码如下::

package bean;

import javaio;

import javautil;

public class Ip{

static public HashMap ping; //ping 后的结果集

public HashMap getPing(){ //用来得到ping后的结果集

return ping;

}

//当前线程的数量, 防止过多线程摧毁电脑

static int threadCount = 0;

public Ip() {

ping = new HashMap();

}

public void Ping(String ip) throws Exception{

//最多30个线程

while(threadCount>30)

Threadsleep(50);

threadCount +=1;

PingIp p = new PingIp(ip);

pstart();

}

public void PingAll() throws Exception{

//首先得到本机的IP,得到网段

InetAddress host = InetAddressgetLocalHost();

String hostAddress = hostgetHostAddress();

int k=0;

k=hostAddresslastIndexOf("");

String ss = hostAddresssubstring(0,k+1);

for(int i=1;i <=255;i++){ //对所有局域网Ip

String iip=ss+i;

Ping(iip);

}

//等着所有Ping结束

while(threadCount>0)

Threadsleep(50);

}

public static void main(String[] args) throws Exception{

Ip ip= new Ip();

ipPingAll();

javautilSet entries = pingentrySet();

Iterator iter=entriesiterator();

String k;

while(iterhasNext()){

MapEntry entry=(MapEntry)iternext();

String key=(String)entrygetKey();

String value=(String)entrygetValue();

if(valueequals("true"))

Systemoutprintln(key+"-->"+value);

}

}

class PingIp extends Thread{

public String ip; // IP

public PingIp(String ip){

thisip=ip;

}

public void run(){

try{

Process p= RuntimegetRuntime()exec ("ping "+ip+ " -w 300 -n 1");

InputStreamReader ir = new InputStreamReader(pgetInputStream());

LineNumberReader input = new LineNumberReader (ir);

//读取结果行

for (int i=1 ; i <7; i++)

inputreadLine();

String line= inputreadLine();

if (linelength() <17 || linesubstring(8,17)equals("timed out"))

pingput(ip,"false");

else

pingput(ip,"true");

//线程结束

threadCount -= 1;

}catch (IOException e){}

}

}

}

举个例子,假设服务器端运行的是servlet,客户端(浏览器)发送url到服务器,经过解析,服务器找到并运行相应的servlet程序,在servlet程序中可以接受到用户提交的信息,比如用户提交方式是Get方式,则servlet调用其doGet方法,在doGet方法中,可以通过request获取用户提交的数据(包括ip)

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String ip = requsetgetRemoteAddr();//获取客户端ip

}

获得了ip后就可以查询ip所属地址,可以登录http://wwwip138com/

若要自己编写软件查询,就要连接数据库。

java获取本机的外网ip示例:

import javaioIOException;

import javaioInputStream;

import javanetHttpURLConnection;

import javanetMalformedURLException;

import javanetURL;

import javautilregexMatcher;

import javautilregexPattern;

/

获取本机外网IP地址

思想是访问网站http://checkipdyndnsorg/,得到返回的文本后解析出本机在外网的IP地址

@author pieryon

/

public class ExternalIpAddressFetcher {

// 外网IP提供者的网址

private String externalIpProviderUrl;

// 本机外网IP地址

private String myExternalIpAddress;

public ExternalIpAddressFetcher(String externalIpProviderUrl) {

thisexternalIpProviderUrl = externalIpProviderUrl;

String returnedhtml = fetchExternalIpProviderHTML(externalIpProviderUrl);

parse(returnedhtml);

}

/

从外网提供者处获得包含本机外网地址的字符串

从http://checkipdyndnsorg返回的字符串如下

<html><head><title>Current IP Check</title></head><body>Current IP Address: 123147226222</body></html>

@param externalIpProviderUrl

@return

/

private String fetchExternalIpProviderHTML(String externalIpProviderUrl) {

// 输入流

InputStream in = null;

// 到外网提供者的Http连接

HttpURLConnection httpConn = null;

try {

// 打开连接

URL url = new URL(externalIpProviderUrl);

httpConn = (HttpURLConnection) urlopenConnection();

// 连接设置

HttpURLConnectionsetFollowRedirects(true);

httpConnsetRequestMethod("GET");

httpConnsetRequestProperty("User-Agent",

"Mozilla/40 (compatible; MSIE 60; Windows 2000)");

// 获取连接的输入流

in = httpConngetInputStream();

byte[] bytes=new byte[1024];// 此大小可根据实际情况调整

// 读取到数组中

int offset = 0;

int numRead = 0;

while (offset < byteslength

&& (numRead=inread(bytes, offset, byteslength-offset)) >= 0) {

offset += numRead;

}

// 将字节转化为为UTF-8的字符串

String receivedString=new String(bytes,"UTF-8");

// 返回

return receivedString;

} catch (MalformedURLException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

} finally {

try {

inclose();

httpConndisconnect();

} catch (Exception ex) {

exprintStackTrace();

}

}

// 出现异常则返回空

return null;

}

/

使用正则表达式解析返回的HTML文本,得到本机外网地址

@param html

/

private void parse(String html){

Pattern pattern=Patterncompile("(\\d{1,3})[](\\d{1,3})[](\\d{1,3})[](\\d{1,3})", PatternCASE_INSENSITIVE);

Matcher matcher=patternmatcher(html);

while(matcherfind()){

myExternalIpAddress=matchergroup(0);

}

}

/

得到本机外网地址,得不到则为空

@return

/

public String getMyExternalIpAddress() {

return myExternalIpAddress;

}

public static void main(String[] args){

ExternalIpAddressFetcher fetcher=new ExternalIpAddressFetcher("http://checkipdyndnsorg/");

Systemoutprintln(fetchergetMyExternalIpAddress());

}

}

网络通信可分为两种模式:TCP有连接的通信

UDP无连接的通信

依照上述的问题我可以理解为你是要进行有连接的通信。是要经过三次握手才能实现可靠的连接

第一次:建立连接时三次握手,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN(Synchronize Sequence Numbers)同步序列号。

服务器端即可使用:

Socket s=serverSocketaccept();

String clientIP=sgetInetAddress()toString();

这就实现了java服务器端获取到连接此服务器的客户端的IP了,你若想实现获取所有连接此服务器的客户端的IP,你可以把每次accept()返回的socket放进全局的Vector里面,然后在遍历这个vector方法就同上代码咯……

在JSP里,获取客户端的IP地址的方法是:requestgetRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 requestgetRemoteAddr()方法获取的IP地址是:127001或 1921681110,而并不是客户端的真实IP。

requestgetRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。

于是可得出获得客户端真实IP地址的方法一:

public String getRemortIP(HttpServletRequest request) {

if (requestgetHeader("x-forwarded-for") == null) {

return requestgetRemoteAddr();

}

return requestgetHeader("x-forwarded-for");

}

你可以写一个Filter配置在webxml中 让服务器启动的时候就开始监听 直到服务器停止!

只能根据用户请求带过来的sessionID所匹配的ip地址 而且只可以通过request获得ip 反正你能得到session 那得到request是一样简单的不是吗

得到request后命令为:

  String ip = requestgetRemoteAddr();

这个ip字符串就是了

   获得项目服务器的IP大概做法是在配置文件里面进行配置,可以使服务器已启动便执行,示例如下:

启动服务器的时候启动一个类,可以在webxml中配置,如下:

<servlet>

    <servlet-name></servlet-name>

    <servlet-class></servlet-class>

    <init-param>

      <param-name>basedir</param-name>

      <param-value></param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

  </servlet>

指明你需要启动的servlet即可

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » JAVA如何获取局域网内所有安卓设备的ip地址,MAC以及序列号?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情