NetPro: Packet Analysis and Visualization tool
Forum rules
READ NOW: L2j Forums Rules of Conduct
READ NOW: L2j Forums Rules of Conduct
- jurchiks
- Posts: 6769
- Joined: Sat Sep 19, 2009 4:16 pm
- Location: Eastern Europe
Re: NetPro: Packet Analysis and Visualization tool
Had a good laugh about that scripting engine example
I see your reasoning (and it's solid), but even so, a wiki and an issue tracker would be much better than this single topic. Besides, the reasons for all the l2jserver forks have been mentioned countless times before; I hope your project is better than that.
The localization should definitely be post-v1, that's for sure. I'm personally all for people learning some English instead of just using whatever they can find in their native language, it's beneficial for everyone after all, especially for those people themselves. You should, of course, first ask around if there's even need for it - if there are only 10 people who want it and each of them speaks a different language, but they all can still use your project as-is, then it's probably not worth it. Just use simple terms and it's going to be ok.
I assume that that "larger project catalog" you mentioned is a commercial product?
In any case, good luck with the project.
I see your reasoning (and it's solid), but even so, a wiki and an issue tracker would be much better than this single topic. Besides, the reasons for all the l2jserver forks have been mentioned countless times before; I hope your project is better than that.
The localization should definitely be post-v1, that's for sure. I'm personally all for people learning some English instead of just using whatever they can find in their native language, it's beneficial for everyone after all, especially for those people themselves. You should, of course, first ask around if there's even need for it - if there are only 10 people who want it and each of them speaks a different language, but they all can still use your project as-is, then it's probably not worth it. Just use simple terms and it's going to be ok.
I assume that that "larger project catalog" you mentioned is a commercial product?
In any case, good luck with the project.
If you have problems, FIRST TRY SOLVING THEM YOURSELF, and if you get errors, TRY TO ANALYZE THEM, and ONLY if you can't help it, THEN ask here.
Otherwise you will never learn anything if all you do is copy-paste!
Discussion breeds innovation.
Otherwise you will never learn anything if all you do is copy-paste!
Discussion breeds innovation.
- UnAfraid
- L2j Veteran
- Posts: 4199
- Joined: Mon Jul 23, 2007 4:25 pm
- Location: Bulgaria
- Contact:
Re: NetPro: Packet Analysis and Visualization tool
Why don't u use javafx its really cool looking and easy to work with.
Also packet injection is kinda nice it helps u gather information that u normally would need to spend a lot of time.
For example while getting skill tree u can request data per each skill level and l2off will give it to you.
And u can use RequestLink to get any html that you know by name (Not only html btw )
Also packet injection is kinda nice it helps u gather information that u normally would need to spend a lot of time.
For example while getting skill tree u can request data per each skill level and l2off will give it to you.
And u can use RequestLink to get any html that you know by name (Not only html btw )
-
- Posts: 121
- Joined: Thu Oct 30, 2014 9:54 pm
Re: NetPro: Packet Analysis and Visualization tool
Well, javafx is a part of the JDK (vs a rather heavy lib) only since J8; while the UI was created back in 2011 at J6. I've already moved from JEditorPane to WebView due to horrendous performance in J7 (in J6 it was perfectly fine). Anyway, I didn't really have time to assess what would it take to move to JFX. But from what I understand, the performance would be definitely better (though due to the lack of animations that's not really an issue).UnAfraid wrote:Why don't u use javafx its really cool looking and easy to work with.
Also packet injection is kinda nice it helps u gather information that u normally would need to spend a lot of time.
For example while getting skill tree u can request data per each skill level and l2off will give it to you.
And u can use RequestLink to get any html that you know by name (Not only html btw )
Well, I have to admit, I somehow didn't think about harvesting skill learn data
We have our internal scripts (not bundled with this release) to harvest HTMLs, exchanges (a.k.a. multisells), normal NPC spawns, among other things.
I have been unsuccessful in retrieving anything else than .htms with 22, sadly. Except on unofficial servers, of course.
- UnAfraid
- L2j Veteran
- Posts: 4199
- Joined: Mon Jul 23, 2007 4:25 pm
- Location: Bulgaria
- Contact:
Re: NetPro: Packet Analysis and Visualization tool
I am using l2tower to inject packets and with packet samurai logging the data and analyzing it
-
- Posts: 10
- Joined: Sun Apr 27, 2014 12:17 pm
Re: NetPro: Packet Analysis and Visualization tool
I tested Your tool and is very good. Here is my feedback.SaveGame wrote:For a start, I am mainly asking for what features, based on the public opinion, would add the most value to this application.
About the scripts, could be added some scripts about using packets from opcode > 255. Would be very nice.
About the UI features. Firstly, how dumping packets for opening in future ? In scripts ? Or is there option in cmd or export in UI ?. Second: Could be added PAUSE/RESUME for dumping packets (sometimes I want dump packets only for checking one thing and I not need tons of packets).
Next things that could be usefull is filtering packets by Opcode or name (usefull for checking for example packet with opcode 31 is changing), like tere (I made it in Paint so sorry for quality):
For now for me nothing more is not needed.
Thx.
-
- Posts: 121
- Joined: Thu Oct 30, 2014 9:54 pm
Re: NetPro: Packet Analysis and Visualization tool
This would be much easier if the javadoc was accessible; however, I am busy with ACM ICPC & related contests/training and have been unable to prepare a guide about script writing.michael1414 wrote:About the scripts, could be added some scripts about using packets from opcode > 255. Would be very nice.
Let's just sum up that there are two primary script types you will want to use:
A) Low-level packet handling, manually selecting blocking or asynchronous handling. (subclasses of net.l2emuproject.proxy.script.Script)
Blocking implies packet modification (either within the buffer, or dropping the packet, or allocating a buffer of a different size and writing own data). Therefore, since you must know everything (possible opcodes and structures in all client versions your script is being created for), you can only register the 1st opcodes you are interested in. Hardly convenient, but you know how it is: every once in a while, some opcodes get shifted or shuffled around. So if you register all possible variants; you will still have to filter them by version, etc.
B) High-level asynchronous* packet handling, making use of Packet Payload [Field] Enumeration (PPE). You do not specify any opcodes to handle packets. You define script aliases for fields already in packet definitions and when you get a packet event in your script, you can obtain a typed pointer list for each aliased field. Of course, if the definition doesn't specify that field within a loop, then this list will only contain one pointer (to the field). There are functions to read any type of integer value (since we have many D/Q or D/H/C or H/C or C/H field type changes between protocol versions) for your convenience.
* this merely means that scripts receive packet events outside the I/O thread(s); they still handle events one at a time and in the same order packets were sent/received.
That's a short overview of how scripts work. Of course, without a guide (and javadoc), this doesn't help much. I'll try to get to it.
In earlier versions, there was a menu option which would enable/disable automatic packet logging when connections are initiated. Currently, all connections are logged to disk. Packet logs can be found in [user.home]/l2emu-unique-netpro/michael1414 wrote:Firstly, how dumping packets for opening in future ? In scripts ? Or is there option in cmd or export in UI ?.
That's a good idea.michael1414 wrote:Second: Could be added PAUSE/RESUME for dumping packets (sometimes I want dump packets only for checking one thing and I not need tons of packets).
Filtering by opcode is currently possible via [menu bar] Packets -> Configure -> Select the protocol version of an active connection. You may check/uncheck packets to include/exclude them from view in the packet table.michael1414 wrote:Next things that could be usefull is filtering packets by Opcode or name (usefull for checking for example packet with opcode 31 is changing)
I have been thinking about implementing filtering in a more convenient way, similarly to how you have suggested. I'll look into it.
-
- Posts: 10
- Joined: Sun Apr 27, 2014 12:17 pm
Re: NetPro: Packet Analysis and Visualization tool
Now I understand why my script not worked with 2 opcodes :SaveGame wrote:you can only register the 1st opcodes you are interested in.
Code: Select all
public final class MultisellFileGenerator extends GameScript{ private static final L2Logger LOG = L2Logger.getLogger(MultisellFileGenerator.class); private static final int REQUEST_LINK_HTML = 0x22; private static final int REQUEST_BYPASS_TO_SERVER = 0x23; private static final int EX_BUY_SELL_LIST = 47358; // FE B8 00 private static final int NPC_HTML_MESSAGE = 0x19; /** Constructs this script. */ public MultisellFileGenerator() { super(new int[] { REQUEST_LINK_HTML }, new int[] { EX_BUY_SELL_LIST, NPC_HTML_MESSAGE }); }
-
- Posts: 121
- Joined: Thu Oct 30, 2014 9:54 pm
Re: NetPro: Packet Analysis and Visualization tool
Here's one that makes use of aliases already defined in included packet definitions:
The prereqs are in javadoc. Then you just write '\\dump_multisell 1 300' in the game chat window and wait until multisells are written. Make sure you have examples.game.stealth.PseudoAdminCommandConsumer enabled, otherwise people will see what you are writing
Code: Select all
package internal.dump; import java.io.IOException;import java.io.Writer;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.nio.charset.StandardCharsets;import java.nio.file.Files;import java.nio.file.Path;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.concurrent.Future; import net.l2emuproject.network.mmocore.MMOBuffer;import net.l2emuproject.proxy.network.game.client.L2GameClient;import net.l2emuproject.proxy.network.game.server.L2GameServer;import net.l2emuproject.proxy.network.meta.L2TypedPacketPayloadField;import net.l2emuproject.proxy.network.meta.RandomAccessMMOBuffer;import net.l2emuproject.proxy.network.packets.IPacketAuthor;import net.l2emuproject.proxy.network.packets.ProxyRepeatedPacket;import net.l2emuproject.proxy.script.ClientPacketSender;import net.l2emuproject.proxy.script.ClientPacketSender.UnknownPacketStructureException;import net.l2emuproject.proxy.script.ScriptFieldAlias;import net.l2emuproject.proxy.script.analytics.PpeAnalyticsScript;import net.l2emuproject.proxy.script.game.InteractiveChatCommands;import net.l2emuproject.proxy.state.entity.context.ICacheServerID;import net.l2emuproject.proxy.ui.interpreter.NetProValueInterpreters;import net.l2emuproject.proxy.ui.interpreter.ValueInterpreter;import net.l2emuproject.proxy.ui.savormix.io.base.IOConstants;import net.l2emuproject.util.concurrent.L2ThreadPool;import net.l2emuproject.util.logging.L2Logger; /** * Dumps retail multisells. Prerequisites: empty inventory (to avoid inventory-based multisells showing one or few items), * last folk NPC is a {@code citizen} and you are within 255 distance of them. * * @author _dev_ */public class MegaMultisellDump extends PpeAnalyticsScript implements InteractiveChatCommands, IOConstants{ @ScriptFieldAlias private static final String LIST_ID = "dump_multisell_id"; @ScriptFieldAlias private static final String LAST_PAGE = "dump_multisell_last"; @ScriptFieldAlias private static final String SLOT_ID = "dump_multisell_slot"; @ScriptFieldAlias private static final String SLOT_STACK = "dump_multisell_slot_stackable"; @ScriptFieldAlias private static final String RECEIVABLE_COUNT = "dump_multisell_prod_cnt"; @ScriptFieldAlias private static final String CONSUMABLE_COUNT = "dump_multisell_cons_cnt"; @ScriptFieldAlias private static final String RECEIVEABLE_ITEM = "dump_multisell_prod_item"; @ScriptFieldAlias private static final String RECEIVEABLE_AMOUNT = "dump_multisell_prod_amount"; @ScriptFieldAlias private static final String CONSUMABLE_ITEM = "dump_multisell_cons_item"; @ScriptFieldAlias private static final String CONSUMABLE_AMOUNT = "dump_multisell_cons_amount"; static final Path OUTPUT_ROOT = DATA_MINING_DIRECTORY.resolve("multisell"); private Leech _leech; private Future<?> _task; private Multisell _activeMultisell; @Override public void handleClientPacket(RandomAccessMMOBuffer<L2TypedPacketPayloadField> buf, ICacheServerID cacheContext) throws RuntimeException { if (_task != null && !_task.isDone()) return; final IPacketAuthor auth = buf.getPacketAuthor(); if (!(auth instanceof L2GameClient)) return; // non-interactive mode final String[] cmd = buf.seekSingleField(CHAT_COMMAND).readS().split(" "); if (!"\\\\dump_multisell".equals(cmd[0])) return; // just random chat final L2GameClient client = (L2GameClient)auth; try { final int from = Integer.parseInt(cmd[1]); final int to = Integer.parseInt(cmd[2]); _leech = new Leech((L2GameServer)client.getServer(), from, to); _task = L2ThreadPool.submitLongRunning(_leech); } catch (RuntimeException e) { try { ClientPacketSender.sendChatMessage(client, 5, "SYS", "\\\\dump_multisell id_min id_max"); } catch (UnknownPacketStructureException e1) { // ignore } return; } } @Override public void handleServerPacket(RandomAccessMMOBuffer<L2TypedPacketPayloadField> buf, ICacheServerID cacheContext) throws RuntimeException { if (_leech == null) return; final int id = buf.seekSingleField(LIST_ID).readD(); final boolean last = buf.seekSingleField(LAST_PAGE).readD() != 0; final List<L2TypedPacketPayloadField> slots = buf.getFieldIndices(SLOT_ID); if (_activeMultisell == null) _activeMultisell = new Multisell(id, new ArrayList<MultisellSlot>(slots.size())); final List<L2TypedPacketPayloadField> stacks = buf.getFieldIndices(SLOT_STACK); final List<L2TypedPacketPayloadField> recCnts = buf.getFieldIndices(RECEIVABLE_COUNT); final List<L2TypedPacketPayloadField> conCnts = buf.getFieldIndices(CONSUMABLE_COUNT); int curRecIdx = -1, curConIdx = -1; final List<L2TypedPacketPayloadField> recItems = buf.getFieldIndices(RECEIVEABLE_ITEM); final List<L2TypedPacketPayloadField> recAmounts = buf.getFieldIndices(RECEIVEABLE_AMOUNT); final List<L2TypedPacketPayloadField> conItems = buf.getFieldIndices(CONSUMABLE_ITEM); final List<L2TypedPacketPayloadField> conAmounts = buf.getFieldIndices(CONSUMABLE_AMOUNT); for (int i = 0; i < slots.size(); ++i) { final int received = buf.seekField(recCnts.get(i)).readH(); final int consumed = buf.seekField(conCnts.get(i)).readH(); final MultisellSlot slot = new MultisellSlot(buf.seekField(slots.get(i)).readD(), buf.seekField(stacks.get(i)).readC() != 0, new ArrayList<MultisellItem>(received), new ArrayList<MultisellItem>(consumed)); for (int j = 0; j < received; ++j) { final int item = buf.seekField(recItems.get(++curRecIdx)).readD(); final long amount = buf.seekField(recAmounts.get(curRecIdx)).readQ(); slot._receivables.add(new MultisellItem(item, amount)); } for (int j = 0; j < consumed; ++j) { final int item = buf.seekField(conItems.get(++curConIdx)).readD(); final long amount = buf.seekField(conAmounts.get(curConIdx)).readQ(); slot._consumables.add(new MultisellItem(item, amount)); } _activeMultisell._slots.add(slot); } if (last) { final Multisell m = _activeMultisell; _activeMultisell = null; _leech.notifyContent(m); } } @Override public String getName() { return "Mega HTML dump"; } private static final class Leech implements Runnable { private static final L2Logger LOG = L2Logger.getLogger(Leech.class); private final L2GameServer _server; private final int _min, _max; private final ByteBuffer _buffer; private final MMOBuffer _wrapper; private Multisell _response; Leech(L2GameServer server, int min, int max) { _server = server; _min = min; _max = max + 1; _wrapper = new MMOBuffer(); _wrapper.setByteBuffer(_buffer = ByteBuffer.allocateDirect(1 << 16).order(ByteOrder.LITTLE_ENDIAN)); _wrapper.writeC(0x23); _wrapper.append("menu_select?ask=-303&reply="); _response = null; } @Override public synchronized void run() { LOG.info("Will attempt to dump " + (_max - _min) + " multisells in enforce_checking mode. Thank you for waiting :)"); final int position = _buffer.position(); for (int i = _min; i < _max; ++i) { if (_server.isDced()) break; _buffer.clear().position(position); _wrapper.writeS(String.valueOf(i)); _buffer.flip(); final byte[] content = new byte[_buffer.limit()]; _buffer.get(content); _server.sendPacket(new ProxyRepeatedPacket(content)); // right here, we wait (enforce_checking) _response = null; try { wait(5000); } catch (InterruptedException e) { break; } if (_response == null) { LOG.info("No response for multisell: " + i); continue; } // run on the same thread to be safe new MultisellWriter(_server.getProtocol().getVersion(), _response).run(); } LOG.info("Multisell dump completed."); } synchronized void notifyContent(Multisell content) { _response = content; notify(); } } private static final class MultisellWriter implements Runnable { private static final L2Logger LOG = L2Logger.getLogger(MultisellWriter.class); private final int _protocol; private final Multisell _multisell; MultisellWriter(int protocol, Multisell multisell) { _protocol = protocol; _multisell = multisell; } @Override public void run() { if (_multisell._slots.isEmpty()) { LOG.info("Received empty multisell: " + _multisell._id); return; } // formatter is not thread safe final DateFormat date = new SimpleDateFormat("yyyy-MM-dd"); final String fdate = date.format(new Date()); final String protocol = String.valueOf(_protocol); final Path dir = OUTPUT_ROOT.resolve("interactive").resolve(protocol).resolve(fdate); try { Files.createDirectories(dir); } catch (IOException e) { LOG.error("Failed creating directory: " + dir, e); } final String id = String.valueOf(_multisell._id); final StringBuilder sb = new StringBuilder(9); for (int i = id.length(); i < 5; ++i) sb.append('0'); sb.append(id).append(".xml"); final Path file = dir.resolve(sb.toString()); if (Files.exists(file)) { LOG.info("Skipping existing XML: " + sb); return; } final ValueInterpreter<String> interp = NetProValueInterpreters.getInstance().getStringInterpreterOrDefault("Item"); try (final Writer w = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) { w.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!-- Generated on ").append(fdate); w.append(", server protocol revision ").append(protocol).append(" -->\r\n<multisell id=\""); w.append(id).append("\">\r\n\t<options>\r\n\t\t<showAll>true</showAll>\r\n\t</options>\r\n"); for (final MultisellSlot slot : _multisell._slots) { w.append("\t<!-- ID: ").append(String.valueOf(slot._slotID)).append(" stackable: "); w.append(String.valueOf(slot._stackable)).append(" -->\r\n\t<item>\r\n"); for (final MultisellItem item : slot._receivables) { final String clientName = interp.convert(item._item, null).trim(); final String itemId = String.valueOf(item._item); if (!clientName.isEmpty() && !clientName.equals(itemId)) { w.append("\t\t<!-- ").append(clientName).append(" -->\r\n"); } w.append("\t\t<production id=\"").append(itemId).append("\" amount=\""); w.append(String.valueOf(item._amount)).append("\" />\r\n"); } for (final MultisellItem item : slot._consumables) { final String clientName = interp.convert(item._item, null).trim(); final String itemId = String.valueOf(item._item); if (!clientName.isEmpty() && !clientName.equals(itemId)) { w.append("\t\t<!-- ").append(clientName).append(" -->\r\n"); } w.append("\t\t<ingredient id=\"").append(itemId).append("\" amount=\""); w.append(String.valueOf(item._amount)).append("\" />\r\n"); } w.append("\t</item>\r\n"); } w.append("</multisell>\r\n"); } catch (IOException e) { LOG.error("Failed writing XML: " + sb, e); } } } private static final class Multisell { final int _id; final List<MultisellSlot> _slots; Multisell(int id, List<MultisellSlot> slots) { _id = id; _slots = slots; } } private static final class MultisellSlot { final int _slotID; final boolean _stackable; // allows to input amount instead of forcing '1' final List<MultisellItem> _receivables, _consumables; MultisellSlot(int slotID, boolean stackable, List<MultisellItem> receivables, List<MultisellItem> consumables) { _slotID = slotID; _stackable = stackable; _receivables = receivables; _consumables = consumables; } } private static final class MultisellItem { final int _item; final long _amount; MultisellItem(int item, long amount) { _item = item; _amount = amount; } }}
-
- Posts: 10
- Joined: Sun Apr 27, 2014 12:17 pm
Re: NetPro: Packet Analysis and Visualization tool
Thanks for this script.SaveGame wrote:Here's one that makes use of aliases already defined in included packet definitions:
...
-
- Posts: 14
- Joined: Wed Apr 18, 2007 9:46 am
Re: NetPro: Packet Analysis and Visualization tool
thanks for the script. But anybody have a working script to sniff the buylists.
something like: open buylist -> save buylist in a text file or something else.
something like: open buylist -> save buylist in a text file or something else.
-
- Posts: 121
- Joined: Thu Oct 30, 2014 9:54 pm
Re: NetPro: Packet Analysis and Visualization tool
There is no simple way to sniff the buylist, unless you want it to be written with 0 adena prices.Indra wrote:thanks for the script. But anybody have a working script to sniff the buylists.
something like: open buylist -> save buylist in a text file or something else.
I had a basic script, but I think I deleted it because it was rather useless (though I must admit, as long as prices are not written, it is faster than manual creation). It is much better to sniff individual item "default" prices via private stores.
-
- Posts: 14
- Joined: Wed Apr 18, 2007 9:46 am
Re: NetPro: Packet Analysis and Visualization tool
it will be cool if he save the buylists like this:
and filename = npc name or something to ident it.
Code: Select all
<tradelist npc="XXXX" shop="XXXX" markup="XXXX">
<item id="45493" name="Fishing Rod Pack (30-day)"/>
<item id="45495" name="Normal Bait"/>
<item id="38154" name="Fishing Shot"/>
</tradelist>
-
- Posts: 121
- Joined: Thu Oct 30, 2014 9:54 pm
Re: NetPro: Packet Analysis and Visualization tool
New release of 0.8-SNAPSHOT. Most (non-script/definition) changes are cosmetical, so there's no version increment.
This release should directly benefit those that voiced their opinions. I am sorry, I still did not have time to prepare any guides
P.S. to retain the previous release L&F, modify the launcher bat/sh by adding the
JVM option.
This release should directly benefit those that voiced their opinions. I am sorry, I still did not have time to prepare any guides
[REDACTED: download the release listed ion the first post]FastLogin now supports PIN-less definitions.
FastLogin now supports Security Card authorization.
Added additional packet log filtering by regex, accessible right within the packet table. [michael1414]
Added the ability to pause/resume packet logging (capture) to the packet table. [michael1414]
Added IP aliases to be used within the UI (including free samples .
Added a bottom information panel.
Changed L&F initialization to respect a manually set L&F system property, as well as to select the native L&F by default (instead of Nimbus). [LoneRanger]
P.S. to retain the previous release L&F, modify the launcher bat/sh by adding the
Code: Select all
-Dswing.defaultlaf=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
Last edited by SaveGame on Sun Jan 11, 2015 9:08 am, edited 1 time in total.
- CubAfull
- Posts: 37
- Joined: Wed Feb 03, 2010 9:02 pm
Re: NetPro: Packet Analysis and Visualization tool
Hi, I want to test your program but I'm facing some problems.
Installed Java version: jre1.8.0_25 x64
Tested in SO: Windows 7 and 8.1
After running the NetPro_win.bat I can see the "Please enter your authorization key here".
After entering the key: "HgWjowlGVfLmto3SZPsvUCx+nXjugWqYJdyh6AJiwPM=" I can see for a second the "grumpy cat" logo but nothing else.
In the log/java I have some files with this information:
Installed Java version: jre1.8.0_25 x64
Tested in SO: Windows 7 and 8.1
After running the NetPro_win.bat I can see the "Please enter your authorization key here".
After entering the key: "HgWjowlGVfLmto3SZPsvUCx+nXjugWqYJdyh6AJiwPM=" I can see for a second the "grumpy cat" logo but nothing else.
In the log/java I have some files with this information:
Code: Select all
INFO [2015-01-08 01:49:13.063 -0300] L2JFreeConfig: Logging initialized.
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: ___ ___ ________ .__________.
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: `MM\ `M' `MMMMMMMb. | 3884 |
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: MMM\ M / MM `Mb |__________|
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: M\MM\ M ____ /M MM MM ___ __ _____
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: M \MM\ M 6MMMMb /MMMMM MM MM `MM 6MM 6MMMMMb
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: M \MM\ M 6M' `Mb MM MM .M9 MM69 " 6M' `Mb
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: M \MM\ M MM MM MM MMMMMMM9' MM' MM MM
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: M \MM\M MMMMMMMM MM MM MM MM MM
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: M \MMM MM MM MM MM MM MM
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: M \MM YM d9 YM. , MM MM YM. ,M9
INFO [2015-01-08 01:49:13.110 -0300] ProxyInfo: _M_ \M YMMMM9 YMMM9 _MM_ _MM_ YMMMMM9
-----------------------------------------------------------------------------------------------------------------------------------------------------={ Config }
INFO [2015-01-08 01:49:13.173 -0300] L2JFreeConfig$ConfigFileLoader: loading 'config\proxy.properties'
------------------------------------------------------------------------------------------------------------------------------------------------={ Thread Pool }
INFO [2015-01-08 01:49:13.188 -0300] L2ThreadPool: No scheduled thread pool has been manually initialized, so initializing default one.
INFO [2015-01-08 01:49:13.188 -0300] L2ThreadPool: No instant thread pool has been manually initialized, so initializing default one.
INFO [2015-01-08 01:49:13.188 -0300] L2ThreadPool: No long running thread pool has been manually initialized, so initializing default one.
INFO [2015-01-08 01:49:13.188 -0300] L2ThreadPool: L2ThreadPool: Initialized with
INFO [2015-01-08 01:49:13.188 -0300] L2ThreadPool: ... 4/2147483647 scheduler,
INFO [2015-01-08 01:49:13.188 -0300] L2ThreadPool: ... 0/2147483647 instant,
INFO [2015-01-08 01:49:13.188 -0300] L2ThreadPool: ... 0/2147483647 long running thread(s).
----------------------------------------------------------------------------------------------------------------------------------------------------={ Utility }
INFO [2015-01-08 01:49:13.204 -0300] Shutdown: ShutdownHook: Initialized.
INFO [2015-01-08 01:49:13.204 -0300] DeadlockDetector: DeadlockDetector: Initialized.
I ♥ Cuba...
-
- Posts: 121
- Joined: Thu Oct 30, 2014 9:54 pm
Re: NetPro: Packet Analysis and Visualization tool
Hello there.CubAfull wrote:Hi, I want to test your program but I'm facing some problems.
Installed Java version: jre1.8.0_25 x64
Tested in SO: Windows 7 and 8.1
After running the NetPro_win.bat I can see the "Please enter your authorization key here".
After entering the key: "HgWjowlGVfLmto3SZPsvUCx+nXjugWqYJdyh6AJiwPM=" I can see for a second the "grumpy cat" logo but nothing else.
Due to the fact that NetPro allows user-made scripts to be presented in source form, you are required to run NetPro via a JDK executable (javaw/java) OR add the JDK's tools.jar to the classpath if running via a JRE.
Now, you might think "I have set up JAVA_HOME ages ago and added that to PATH before system32, so javaw in use WILL be from the JDK".
However, recent Oracle JDK installers have started prepending 'javapath' entries to PATH. So after every installation, you must now manually move your JAVA_HOME related entry before the javapath entry, so that
Code: Select all
where javaw
In any case, I will do a new release, so that a proper warning is shown to the user in this scenario.
Thank you for the report.
SaveGame