@Override
	protected void read(InputBuffer b) throws IOException, ParsingException {
		time = Util.getInt(b.get(0, 4));
		stream = Util.getInt(b.get(4, 4));
		b = b.getSubBuffer(8);

		services = getMessageFactory().parseNodeServicesMessage(b);
		b = b.getSubBuffer(services.length());

		byte[] ipBytes = b.get(0, 16);

		try {
			if (isIpv4(ipBytes)) {
				ip = InetAddress.getByAddress(Arrays.copyOfRange(ipBytes, 12, 16));
			} else {
				ip = InetAddress.getByAddress(ipBytes);
			}
		} catch (UnknownHostException e) {
			throw new ParsingException("Not an IP: " + Arrays.toString(ipBytes));
		}

		byte[] portBytes = b.get(16, 2);
		port = Util.getInt(new byte[] { 0, 0, portBytes[0], portBytes[1] });

		if (ip.isAnyLocalAddress() || ip.isMulticastAddress()) {
			throw new ParsingException("IP is local or multicast!");
		}

		boolean isNull = true;

		for (byte a : ip.getAddress()) {
			if (a != 0) {
				isNull = false;
			}
		}

		if (isNull) {
			throw new ParsingException("IP is 0");
		}
	}