diff --git a/pom.xml b/pom.xml index 363efb6..f11761b 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ io.netty netty-all - 4.1.68.Final + 4.1.110.Final org.projectlombok diff --git a/src/main/java/cn/x47/config/Config.java b/src/main/java/cn/x47/config/Config.java index 91d71e8..e3cddf1 100644 --- a/src/main/java/cn/x47/config/Config.java +++ b/src/main/java/cn/x47/config/Config.java @@ -2,7 +2,7 @@ package cn.x47.config; public class Config { // 设置协议版本,1 表示 RIP v1,2 表示 RIP v2 - public static final byte RIP_VERSION = 2; + public static final byte RIP_VERSION = 1; public static final boolean startServer = true; public static final boolean startClient = false; } diff --git a/src/main/java/cn/x47/handle/RIPPacketDecoder.java b/src/main/java/cn/x47/handle/RIPPacketDecoder.java index 6163f48..0d73c6a 100644 --- a/src/main/java/cn/x47/handle/RIPPacketDecoder.java +++ b/src/main/java/cn/x47/handle/RIPPacketDecoder.java @@ -29,26 +29,22 @@ public class RIPPacketDecoder extends MessageToMessageDecoder { while (buf.readableBytes() >= 20) { RIPEntry entry = new RIPEntry(); entry.setAddressFamily(buf.readShort()); - if (ripPacket.getVersion() == 2) { - entry.setRouteTag(buf.readShort()); - } else { - entry.setRouteTag((short) 0); - } + entry.setRouteTag(buf.readShort()); + byte[] ipBytes = new byte[4]; buf.readBytes(ipBytes); entry.setIpAddress(InetAddress.getByAddress(ipBytes)); - if (ripPacket.getVersion() == 2) { - buf.readBytes(ipBytes); - entry.setSubnetMask(InetAddress.getByAddress(ipBytes)); - buf.readBytes(ipBytes); - entry.setNextHop(InetAddress.getByAddress(ipBytes)); - } else { + buf.readBytes(ipBytes); + entry.setSubnetMask(InetAddress.getByAddress(ipBytes)); + buf.readBytes(ipBytes); + entry.setNextHop(InetAddress.getByAddress(ipBytes)); + if (ripPacket.getVersion() == 1) { // 对于 RIP v1,子网掩码和下一跳需要推断或设为默认值 entry.setSubnetMask(InetAddress.getByName("255.255.255.0")); // 示例,实际应根据 IP 类推断 entry.setNextHop(packet.sender().getAddress()); } - entry.setMetric(buf.readInt()); + entry.setMetric((int) buf.readUnsignedInt()); entries.add(entry); } ripPacket.setEntries(entries); diff --git a/src/main/java/cn/x47/service/RIPClient.java b/src/main/java/cn/x47/service/RIPClient.java index 8ae02c1..c3a1a19 100644 --- a/src/main/java/cn/x47/service/RIPClient.java +++ b/src/main/java/cn/x47/service/RIPClient.java @@ -11,9 +11,6 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.DatagramChannel; import io.netty.channel.socket.nio.NioDatagramChannel; -import java.net.InetAddress; -import java.net.UnknownHostException; - public class RIPClient { @@ -36,8 +33,7 @@ public class RIPClient { public void sendRipPacket(RIPPacket packet) { try { - ChannelFuture future = bootstrap.bind(0) - .sync(); + ChannelFuture future = bootstrap.bind(0).sync(); future.channel().writeAndFlush(packet).sync(); future.channel().close(); } catch (InterruptedException e) { diff --git a/src/main/java/cn/x47/service/RIPServer.java b/src/main/java/cn/x47/service/RIPServer.java index 1feec9d..ccab745 100644 --- a/src/main/java/cn/x47/service/RIPServer.java +++ b/src/main/java/cn/x47/service/RIPServer.java @@ -4,7 +4,9 @@ package cn.x47.service; import cn.x47.handle.RIPPacketDecoder; import cn.x47.handle.RIPServerHandler; import io.netty.bootstrap.Bootstrap; -import io.netty.channel.*; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.DatagramChannel; import io.netty.channel.socket.nio.NioDatagramChannel;