java获取本机外网ip地址,java获取局域网ip

  java获取本机外网ip地址,java获取局域网ip

  00-1010标题描述代码的详细解释效果的展示

  00-1010网络编程时,有时需要遍历局域网内的所有主机,因此需要获取内网的所有IP地址。

  标题:一个获取内网所有IP地址的小应用。

  解决方案思维

  创建一个类:GainAlllpFrame,它继承了JFrame表单类。

  定义一个gainAlllp()方法:用于获取所有IP并将其显示在文本字段中的方法。

  定义一个内部类Pinglp线程,它是一个线程类。用于判断给定IP是否是内部网IP的线程对象。

  线程的执行逻辑是ping指定的IP。

  获取这台机器的IP地址和网段。

  inet address host=inet address . getlocalhost();//获取本机的InetAddress对象字符串host address=host . gethostaddress();//获取本机的IP地址int pos=hostAddress.lastIndexOf( . );//获取IP地址string wd=host address . substring(0,pos1)中最后一个点的位置;//截取本机IP,获取网段上ping**指定的IP地址,得到ping * *结果。

  //获取ping IP进程,-w 280是等待每个回复的超时,-n 1是要发送的echo请求数,process process=runtime . Get runtime()。exec( ping IP -w280-n1 );InputStream is=process . getinputstream();//获取进程的输入流对象InputStreamReader ISR=New InputStreamReader(is);//在=New Buffered Reader (ISR)中创建InputStreamReader对象缓冲读取器;//创建缓冲区字符流对象String line=in . readline();//边看资料边(行!=null) { if(行!=null!line . equals(){ if(line . substring(0,2))。equals( from ) (line . length()10 line . substring(0,10)。equals( reply from )){//确定是ping通的IP。//将IP}} line=in.readLine()添加到集合中;//再读一遍资料}注意:这个问题只适合在window中运行。

  00-1010 Hu tool介绍,pom.xml增加

  dependencygroupid cn . Hu tool/groupid artifactidhu tool-core/artifactidversion 5 . 6 . 5/version/dependencyGainAllpFrame

  导入cn . Hu tool . core . io . fileutil;导入cn . Hu tool . core . io . iou til;导入Java . awt . borderlayout;导入Java . awt . event . action event;导入Java . awt . event . action listener;导入Java . awt . event . window adapter;导入Java . awt . event . window event;导入Java . io . buffered reader;进口

  port java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.InetAddress;import java.util.Hashtable;import java.util.Iterator;import java.util.Set;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;/** * Description: * * @author 小王同学 * @version 1.0 */class GainAllIpFrame extends JFrame { private JTextArea ta_allIp; static public Hashtable<String, String> pingMap; // 用于存储所ping的IP是否为内网IP的集合 public static void main(String args[]) { GainAllIpFrame frame = new GainAllIpFrame(); frame.setVisible(true); } public void gainAllIp() throws Exception {// 获得所有IP,并显示在文本域中的方法 InetAddress host = InetAddress.getLocalHost();// 获得本机的InetAddress对象 String hostAddress = host.getHostAddress();// 获得本机的IP地址 int pos = hostAddress.lastIndexOf(".");// 获得IP地址中最后一个点的位置 String wd = hostAddress.substring(0, pos + 1);// 对本机的IP进行截取,获得网段 for (int i = 1; i <= 255; i++) { // 对局域网的IP地址进行遍历 String ip = wd + i;// 生成IP地址 PingIpThread thread = new PingIpThread(ip);// 创建线程对象 thread.start();// 启动线程对象 } Set<String> set = pingMap.keySet();// 获得集合中键的Set视图 Iterator<String> it = set.iterator();// 获得迭代器对象 while (it.hasNext()) { // 迭代器中有元素,则执行循环体 String key = it.next(); // 获得下一个键的名称 String value = pingMap.get(key);// 获得指定键的值 if (value.equals("true")) { ta_allIp.append(key + "n");// 追加显示IP地址 } } } /** * Create the frame */ public GainAllIpFrame() { super(); addWindowListener(new WindowAdapter() { public void windowOpened(final WindowEvent e) { try { gainAllIp(); ta_allIp.setText(null); } catch (Exception e1) { e1.printStackTrace(); ta_allIp.setText(null); } } }); setTitle("获得内网的所有IP地址"); setBounds(400, 200, 270, 375); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); ta_allIp = new JTextArea(); scrollPane.setViewportView(ta_allIp); final JPanel panel = new JPanel(); getContentPane().add(panel, BorderLayout.NORTH); final JButton button_2 = new JButton(); button_2.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { try { ta_allIp.setText(null); gainAllIp(); } catch (Exception e1) { e1.printStackTrace(); ta_allIp.setText(null); JOptionPane.showMessageDialog(null, "应用程序异常,请再试一次。"); } } }); button_2.setText("显示所有IP"); panel.add(button_2); final JButton button = new JButton(); button.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { System.exit(0); } }); button.setText("退 出"); panel.add(button); pingMap = new Hashtable<String, String>(); } class PingIpThread extends Thread {// 判断给定IP是否为内网IP的线程对象 public String ip; // 表示IP地址的成员变量 public PingIpThread(String ip) {// 参数为需要判断的IP地址 this.ip = ip; } public void run() { try { // 获得所ping的IP进程,-w 280是等待每次回复的超时时间,-n 1是要发送的回显请求数 System.out.println("尝试ping IP:"+ip); Process process = Runtime.getRuntime().exec( "ping " + ip + " -w 280 -n 1"); InputStream is = process.getInputStream();// 获得进程的输入流对象 InputStreamReader isr = new InputStreamReader(is);// 创建InputStreamReader对象 BufferedReader in = new BufferedReader(isr);// 创建缓冲字符流对象 String line = IoUtil.read(is,"GBK");//CMD获取的值是GBK格式的 //String line = in.readLine();// 读取信息 if (line != null && !line.equals("")) { if (line.indexOf("来自") >0 line.indexOf("Reply from")>0) {// 判断是ping通过的IP地址 pingMap.put(ip, "true");// 向集合中添加IP } } } catch (IOException e) { e.printStackTrace(); } } }}

 

  

效果展示

 

  以上就是Java实现获取内网的所有IP地址的详细内容,更多关于Java获取内网IP地址的资料请关注盛行IT其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: