|
|
@@ -1,21 +1,21 @@
|
|
|
package cn.reghao.autodop.common.machine;
|
|
|
|
|
|
+import cn.reghao.autodop.common.machine.contant.ProcFile;
|
|
|
import cn.reghao.autodop.common.machine.contant.TcpState;
|
|
|
-import cn.reghao.autodop.common.machine.pojo.NetStat;
|
|
|
+import cn.reghao.autodop.common.machine.pojo.net.NetCardStat;
|
|
|
+import cn.reghao.autodop.common.machine.pojo.net.NetConnStat;
|
|
|
+import cn.reghao.autodop.common.machine.pojo.ProcessStat;
|
|
|
import cn.reghao.autodop.common.machine.utils.IpAddressConversion;
|
|
|
+import cn.reghao.autodop.common.utils.StringUtil;
|
|
|
import cn.reghao.autodop.common.utils.text.TextFile;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
-import java.net.Inet4Address;
|
|
|
-import java.net.InetAddress;
|
|
|
-import java.net.NetworkInterface;
|
|
|
-import java.net.SocketException;
|
|
|
+import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Enumeration;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
- * 网络信息
|
|
|
+ * 网络信息,依赖于 ProcessStat
|
|
|
*
|
|
|
* @author reghao
|
|
|
* @date 2019-10-23 21:17:04
|
|
|
@@ -25,65 +25,74 @@ public class Network {
|
|
|
private TextFile textFile = new TextFile();
|
|
|
private IpAddressConversion conversion = new IpAddressConversion();
|
|
|
|
|
|
- /**
|
|
|
- * 获取本机物理网卡 IPv4 地址(不获取 loopback 和虚拟接口的地址)
|
|
|
- *
|
|
|
- * @param
|
|
|
- * @return
|
|
|
- * @date 2019-10-23 下午9:27
|
|
|
- */
|
|
|
- public static List<String> ipv4() throws SocketException {
|
|
|
- List<String> addresses = new ArrayList<>();
|
|
|
-
|
|
|
- Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
|
|
|
- while (interfaces.hasMoreElements()) {
|
|
|
- NetworkInterface iface = (NetworkInterface) interfaces.nextElement();
|
|
|
-
|
|
|
- Enumeration<InetAddress> inetAddrs = iface.getInetAddresses();
|
|
|
- while (inetAddrs.hasMoreElements()) {
|
|
|
- InetAddress address = inetAddrs.nextElement();
|
|
|
- if (address instanceof Inet4Address && !address.isLoopbackAddress()) {
|
|
|
- String addr = address.getHostAddress();
|
|
|
- if (addr.contains("192.168") || addr.contains("172.16")) {
|
|
|
- addresses.add(addr);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ public List<NetCardStat> ifconfig() {
|
|
|
+ List<NetCardStat> cardStats = new ArrayList<>();
|
|
|
+ String[] devs = textFile.readFile(ProcFile.DEV).split(System.lineSeparator());
|
|
|
+ for (int i = 2; i < devs.length; i++) {
|
|
|
+ String[] data = StringUtil.format(devs[i]).split(" ");
|
|
|
+ NetCardStat cardStat = new NetCardStat();
|
|
|
+ cardStat.setIface(data[0]);
|
|
|
+ cardStat.setRecvBytes(Long.parseLong(data[1]));
|
|
|
+ cardStat.setRecvPackets(Long.parseLong(data[2]));
|
|
|
+ cardStat.setRecvErrs(Long.parseLong(data[3]));
|
|
|
+ cardStat.setRecvDrop(Long.parseLong(data[4]));
|
|
|
+ cardStat.setRecvFifo(Long.parseLong(data[5]));
|
|
|
+ cardStat.setRecvFrame(Long.parseLong(data[6]));
|
|
|
+ cardStat.setRecvCompressed(Long.parseLong(data[7]));
|
|
|
+ cardStat.setRecvMulticast(Long.parseLong(data[8]));
|
|
|
+ cardStat.setSendBytes(Long.parseLong(data[9]));
|
|
|
+ cardStat.setSendPackets(Long.parseLong(data[10]));
|
|
|
+ cardStat.setSendErrs(Long.parseLong(data[11]));
|
|
|
+ cardStat.setSendDrop(Long.parseLong(data[12]));
|
|
|
+ cardStat.setSendFifo(Long.parseLong(data[13]));
|
|
|
+ cardStat.setSendColls(Long.parseLong(data[14]));
|
|
|
+ cardStat.setSendCarrier(Long.parseLong(data[15]));
|
|
|
+ cardStat.setSendCompressed(Long.parseLong(data[16]));
|
|
|
+
|
|
|
+ cardStats.add(cardStat);
|
|
|
}
|
|
|
|
|
|
- return addresses;
|
|
|
+ log.info("");
|
|
|
+ return cardStats;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * netstat -anp|grep '^tcp.*' 命令实现
|
|
|
+ * netstat -anp|grep '^tcp.*' 命令
|
|
|
*
|
|
|
- * @param
|
|
|
- * @return
|
|
|
* @date 2019-10-25 上午8:59
|
|
|
*/
|
|
|
- public void netstat() {
|
|
|
- String tcpFile = "/proc/net/tcp";
|
|
|
- String[] conns = textFile.readFile(tcpFile).split(System.lineSeparator());
|
|
|
+ public List<NetConnStat> netstat() {
|
|
|
+ new Process().topProcess();
|
|
|
|
|
|
- List<NetStat> list = new ArrayList<>();
|
|
|
+ String[] conns = textFile.readFile(ProcFile.TCP).split(System.lineSeparator());
|
|
|
+
|
|
|
+ List<NetConnStat> list = new ArrayList<>();
|
|
|
for (int i = 1; i < conns.length; i++) {
|
|
|
String[] fields = conns[i].split("\\s+");
|
|
|
- NetStat netStat = new NetStat();
|
|
|
+ NetConnStat netConnStat = new NetConnStat();
|
|
|
String localAddr = fields[2].split(":")[0];
|
|
|
String localPort = fields[2].split(":")[1];
|
|
|
- netStat.setLocalAddr(conversion.dotDecimal(localAddr));
|
|
|
- netStat.setLocalPort(Integer.valueOf(localPort, 16));
|
|
|
+ netConnStat.setLocalAddr(conversion.dotDecimal(localAddr));
|
|
|
+ netConnStat.setLocalPort(Integer.valueOf(localPort, 16));
|
|
|
|
|
|
String remoteAddr = fields[3].split(":")[0];
|
|
|
String remotePort = fields[3].split(":")[1];
|
|
|
- netStat.setRemoteAddr(conversion.dotDecimal(remoteAddr));
|
|
|
- netStat.setRemotePort(Integer.valueOf(remotePort, 16));
|
|
|
- netStat.setState(tcpState(Integer.valueOf(fields[4], 16)));
|
|
|
+ netConnStat.setRemoteAddr(conversion.dotDecimal(remoteAddr));
|
|
|
+ netConnStat.setRemotePort(Integer.valueOf(remotePort, 16));
|
|
|
+ netConnStat.setState(tcpState(Integer.valueOf(fields[4], 16)));
|
|
|
+
|
|
|
+ String sendq = fields[5].split(":")[0];
|
|
|
+ String recvq = fields[5].split(":")[1];
|
|
|
+ netConnStat.setSendq(Long.valueOf(sendq, 16));
|
|
|
+ netConnStat.setRecvq(Long.valueOf(recvq, 16));
|
|
|
|
|
|
- list.add(netStat);
|
|
|
+ long inode = Long.parseLong(fields[10]);
|
|
|
+ netConnStat.setProcess(ProcessStat.socketInodes.get(inode));
|
|
|
+
|
|
|
+ list.add(netConnStat);
|
|
|
}
|
|
|
|
|
|
- log.info("");
|
|
|
+ return list;
|
|
|
}
|
|
|
|
|
|
private TcpState tcpState(int state) {
|
|
|
@@ -115,8 +124,9 @@ public class Network {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static void main(String[] args) {
|
|
|
+ public static void main(String[] args) throws IOException {
|
|
|
Network network = new Network();
|
|
|
- network.netstat();
|
|
|
+ //network.netstat();
|
|
|
+ network.ifconfig();
|
|
|
}
|
|
|
}
|