Thread: [Javanetsim-cvs] javaNetSim/core AccessListEngine.java, 1.4, 1.5 ExternalProxy.java, 1.5, 1.6 NATEn
Status: Beta
Brought to you by:
darkkey
|
From: Alexander B. <da...@us...> - 2008-10-13 12:36:32
|
Update of /cvsroot/javanetsim/javaNetSim/core In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv8468/core Modified Files: AccessListEngine.java ExternalProxy.java NATEngine.java NetworkLayerDevice.java Log Message: Static NAT/PAT seems to be working now. Heading for dynamic NAT... Index: NetworkLayerDevice.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/NetworkLayerDevice.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** NetworkLayerDevice.java 10 Oct 2008 22:18:05 -0000 1.21 --- NetworkLayerDevice.java 13 Oct 2008 12:36:15 -0000 1.22 *************** *** 34,37 **** --- 34,39 ---- import core.protocolsuite.tcp_ip.InvalidSubnetMaskException; import core.protocolsuite.tcp_ip.Route_entry; + import core.protocolsuite.tcp_ip.IP_packet; + import core.protocolsuite.tcp_ip.ARP_packet; import java.util.*; *************** *** 53,56 **** --- 55,59 ---- private NATEngine nat = new NATEngine(this); + /** * calls the super class (Node) and passes it inName and inProtocolStack *************** *** 127,141 **** public void receivePacket(Packet inPacket, String inInterface) throws LowLinkException { ! try{ ! if(this.getNetworkInterface(inInterface).getNAT() == 1){ ! ! }else if(this.getNetworkInterface(inInterface).getNAT() == 2){ ! } ! }catch(InvalidNetworkInterfaceNameException e){ } if(NodeProtocolStack != null) NodeProtocolStack.receivePacket(inPacket, inInterface); } /** --- 130,162 ---- public void receivePacket(Packet inPacket, String inInterface) throws LowLinkException { ! if(inPacket instanceof IP_packet && !(inPacket instanceof ARP_packet)){ ! try{ ! if(this.getNetworkInterface(inInterface).getNAT() == NetworkInterface.INSIDE_NAT){ ! // mark packet ! ((IP_packet) inPacket).NatMark = true; ! Simulation.addLayerInfo(getClass().getName(), getName(), "IP Packet", "Network", ! "Marked packet as possible inside NAT candidate."); ! }else if(this.getNetworkInterface(inInterface).getNAT() == NetworkInterface.OUTSIDE_NAT){ ! inPacket = nat.NAT_outside((IP_packet) inPacket); ! } ! }catch(InvalidNetworkInterfaceNameException e){ } ! } if(NodeProtocolStack != null) NodeProtocolStack.receivePacket(inPacket, inInterface); } + + public Packet preparePacket(Packet inPacket){ + if(inPacket instanceof IP_packet && !(inPacket instanceof ARP_packet)){ + if(((IP_packet) inPacket).NatMark){ + inPacket = nat.NAT_inside((IP_packet) inPacket); + } + + ((IP_packet) inPacket).NatMark = false; + } + + return inPacket; + } /** *************** *** 193,197 **** if (NetworkInterfacetable.containsKey(inInterfaceKey)) { ! if(NetworkInterfacetable.get(inInterfaceKey) instanceof EthernetNetworkInterface){ EthernetNetworkInterface temp = (EthernetNetworkInterface)NetworkInterfacetable.get(inInterfaceKey); temp.sendPacket(inPacket,inDestMACAddress); --- 214,221 ---- if (NetworkInterfacetable.containsKey(inInterfaceKey)) { ! inPacket = preparePacket(inPacket); ! ! if(NetworkInterfacetable.get(inInterfaceKey) instanceof EthernetNetworkInterface){ ! EthernetNetworkInterface temp = (EthernetNetworkInterface)NetworkInterfacetable.get(inInterfaceKey); temp.sendPacket(inPacket,inDestMACAddress); *************** *** 209,212 **** --- 233,238 ---- if (NetworkInterfacetable.containsKey(inInterfaceKey)) { + inPacket = preparePacket(inPacket); + NetworkInterface temp = (NetworkInterface)NetworkInterfacetable.get(inInterfaceKey); temp.sendPacket(inPacket); Index: NATEngine.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/NATEngine.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** NATEngine.java 12 Oct 2008 21:45:47 -0000 1.3 --- NATEngine.java 13 Oct 2008 12:36:15 -0000 1.4 *************** *** 4,7 **** --- 4,8 ---- import java.util.Hashtable; import java.util.Vector; + import core.protocolsuite.tcp_ip.*; public class NATEngine { *************** *** 61,64 **** --- 62,72 ---- } + public boolean isOverloadIP(String ip){ + for(int i=0; i<rules.size(); i++) + if(rules.get(i).out_ip.equals(ip)) + return true; + return false; + } + public Vector<Integer> findRules(Boolean dynamic, Boolean pool, Integer acl, String in_ip, Integer in_port, String out_ip, Integer out_port, String out_int){ Vector<Integer> result = new Vector<Integer>(); *************** *** 79,82 **** --- 87,202 ---- } + public IP_packet NAT_inside(IP_packet p){ + IP_packet rp = p; + + for(int i=0; i<rules.size(); i++){ + NAT_rule rule = rules.get(i); + String NewIP = ""; + int NewPort = 0; + + if(rule.in_ip.equals(p.getSourceIPAddress()) && parentNode.getACL().passACL(rule.acl, p)){ + // rule found, let's see its type + + if(rule.protocol == NAT_rule.IP || rule.protocol == NAT_rule.ICMP){ + + NewIP = rule.out_ip; + + if(rule.out_ip.length() < 5){ + NewIP = parentNode.getIPAddress(rule.out_int); + } + + Simulation.addLayerInfo(getClass().getName(), parentNode.getName(), "IP Packet", "Network", + "Inside NAT for packet applied: changed src IP from " + p.getSourceIPAddress() + " to " + NewIP + "."); + + rp.setSourceIPAddress(NewIP); + + break; + }else if(rule.protocol == NAT_rule.TCP && p instanceof TCP_packet){ + if(((TCP_packet)p).get_srcPort() == rule.in_port){ + NewIP = rule.out_ip; + NewPort = rule.out_port; + + if(rule.out_ip.length() < 5){ + NewIP = parentNode.getIPAddress(rule.out_int); + } + + Simulation.addLayerInfo(getClass().getName(), parentNode.getName(), "IP Packet", "Network", + "Inside PAT(tcp) for ip packet applied: changed src from " + p.getSourceIPAddress() + ":" + ((TCP_packet)p).get_srcPort() + " to " + NewIP + ":" + NewPort + "."); + + ((TCP_packet)rp).setSrcPort(NewPort); + rp.setSourceIPAddress(NewIP); + } + }else if(rule.protocol == NAT_rule.UDP && p instanceof UDP_packet){ + if(((UDP_packet)p).get_srcPort() == rule.in_port){ + NewIP = rule.out_ip; + NewPort = rule.out_port; + + if(rule.out_ip.length() < 5){ + NewIP = parentNode.getIPAddress(rule.out_int); + } + + Simulation.addLayerInfo(getClass().getName(), parentNode.getName(), "IP Packet", "Network", + "Inside PAT(udp) for ip packet applied: changed src from " + p.getSourceIPAddress() + ":" + ((UDP_packet)p).get_srcPort() + " to " + NewIP + ":" + NewPort + "."); + + ((UDP_packet)rp).setSrcPort(NewPort); + rp.setSourceIPAddress(NewIP); + } + } + } + } + + return p; + } + + public IP_packet NAT_outside(IP_packet p){ + IP_packet rp = p; + + for(int i=0; i<rules.size(); i++){ + NAT_rule rule = rules.get(i); + String NewIP = ""; + int NewPort = 0; + + if(rule.out_ip.equals(p.getDestIPAddress()) && parentNode.getACL().passACL(rule.acl, p)){ + // rule found, let's see its type + + if(rule.protocol == NAT_rule.IP || rule.protocol == NAT_rule.ICMP){ + + NewIP = rule.in_ip; + + Simulation.addLayerInfo(getClass().getName(), parentNode.getName(), "IP Packet", "Network", + "Outside NAT for packet applied: changed dst IP from " + p.getDestIPAddress() + " to " + NewIP + "."); + + rp.setDestIPAddress(NewIP); + + break; + }else if(rule.protocol == NAT_rule.TCP && p instanceof TCP_packet){ + if(((TCP_packet)p).get_destPort() == rule.out_port){ + NewIP = rule.in_ip; + NewPort = rule.in_port; + + Simulation.addLayerInfo(getClass().getName(), parentNode.getName(), "IP Packet", "Network", + "Inside PAT(tcp) for packet applied: changed dst from " + p.getDestIPAddress() + ":" + ((TCP_packet)p).get_destPort() + " to " + NewIP + ":" + NewPort + "."); + + ((TCP_packet)rp).setDestPort(NewPort); + rp.setDestIPAddress(NewIP); + } + }else if(rule.protocol == NAT_rule.UDP && p instanceof UDP_packet){ + if(((UDP_packet)p).get_destPort() == rule.out_port){ + NewIP = rule.in_ip; + NewPort = rule.in_port; + + Simulation.addLayerInfo(getClass().getName(), parentNode.getName(), "IP Packet", "Network", + "Inside PAT(udp) for packet applied: changed dst from " + p.getDestIPAddress() + ":" + ((UDP_packet)p).get_destPort() + " to " + NewIP + ":" + NewPort + "."); + + ((UDP_packet)rp).setDestPort(NewPort); + rp.setDestIPAddress(NewIP); + } + } + } + } + + return p; + } + public NAT_rule getRule(int i){ if(i>=0 && i<rules.size()){ *************** *** 108,111 **** --- 228,241 ---- } + public boolean inPool(String name, String IP){ + if(pools.containsKey(name)){ + Pair ips = pools.get(name); + + return IPV4Address.IPEqLower(IP, (String)ips.getFirst()) + && IPV4Address.IPEqLower((String)ips.getSecond(), IP); + } + return false; + } + public Enumeration<String> getPools(){ return pools.keys(); Index: ExternalProxy.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/ExternalProxy.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ExternalProxy.java 6 Oct 2008 13:20:39 -0000 1.5 --- ExternalProxy.java 13 Oct 2008 12:36:15 -0000 1.6 *************** *** 136,140 **** if(inPacket instanceof IP_packet){ IP_packet IPP = (IP_packet) inPacket; ! System.out.println("Activating NAT when sending..."); //if(!NodeProtocolStack.isInternalIP(IPP.getSourceIPAddress())){ //System.out.println("Activating NAT when sending..."); --- 136,140 ---- if(inPacket instanceof IP_packet){ IP_packet IPP = (IP_packet) inPacket; ! System.out.println("Activating Proxy when sending..."); //if(!NodeProtocolStack.isInternalIP(IPP.getSourceIPAddress())){ //System.out.println("Activating NAT when sending..."); Index: AccessListEngine.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/AccessListEngine.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** AccessListEngine.java 14 Sep 2008 20:51:29 -0000 1.4 --- AccessListEngine.java 13 Oct 2008 12:36:15 -0000 1.5 *************** *** 173,177 **** Hashtable ACLl = (Hashtable)ACLs.get(Integer.valueOf(number)); ! if(ACLl == null) return false; try{ --- 173,177 ---- Hashtable ACLl = (Hashtable)ACLs.get(Integer.valueOf(number)); ! if(ACLl == null) return true; try{ |