Page 1 of 2

Hi all, Is there a command to send and receive TCP messages

Posted: Wed Mar 21, 2012 10:58 pm
by runner01
Hi, all.

First of all, I would like to say hi. I'm new to the forum. I am also very new to Lua based scripting. Now that with the introductions done, here's my question. I used another macro program which is not Lua based. The code is as follows:

Code: Select all

 Begin
     // Set this to the IP of the client where the bot is running
     Variable.Set("BotIP1", "10.0.0.7")
     Variable.Set("BotIP2", "10.0.0.8")
     Function.Execute("loop")
 end

function("loop")
     begin loop("")
          Keyboard.Wait for one of the following keys to be pressed("{<F9>}{<F10>}", "Command")
          Function.Execute("{Command}")
     end
function

function("{<f9>}")
     begin
          Variable.Evaluate (Text)("DNGEnter","Command")
          Network.Send message (TCP)("{BotIP1}", "{Command}")
          Network.Send message (TCP)("{BotIP2}", "{Command}")
     end
function

function("{<f10>}")
     begin
          Variable.Evaluate (Text)("DNGExit","Command")
          Network.Send message (TCP)("{BotIP1}", "{Command}")
          Network.Send message (TCP)("{BotIP2}", "{Command}")
     end
function

What it was doing is, when I press F9 on the main PC, it sends a TCP message to my botting PC telling it to Enter a Dungeon. And when F10 is pressed, it tells it to exit. So my question is, does MicroMacro has a similar function? Something to send TCP command and receive TCP commands?

Regards,
-Runner

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Thu Mar 22, 2012 7:22 am
by MiesterMan
If you are using this for runes of magic I believe there are a lot of work arounds for this already. I know MM has some network functionality but I've never worked with it myself.

This is the link to the "Network Functions" section of the micromacro manual, if it helps:
http://www.solarstrike.net/wiki/index.p ... _Functions

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Thu Mar 22, 2012 10:51 am
by Administrator
Additionally, you may use an addon like LuaSocket if you want to send and receive raw TCP/UDP packets. MicroMacro's built-in networking takes care of a lot of fuss for you such as (de-)serialization and encryption.

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Thu Mar 22, 2012 11:51 am
by runner01
First of all, I would like to thank you on the expedient respond. Actually, I myself and a partner are trying to "rebuild" a couple of bots we have created for a game called Eden Eternal. The original scripting was done using a different tool, sadly that tool is being detected by the game. So we are migrating over to a Luabased script. But thanks for the input. I'll look into the examples provided.

Regards,
Runner

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Thu Mar 22, 2012 5:34 pm
by MiesterMan
Always looking for new games to play. What exactly changed about the game? Is it free to play? Did they add some crapshield like gameguard or punkbuster to go with it?

And what language was the script in? Autoit scripts can almost directly be converted into lua to work with micromacro without all the addon setup.

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Fri Mar 23, 2012 1:41 am
by runner01
The game is f2p, their protection is like strap. But done server side. The tool we used was Blue eye macro. The virtual driver is being detected.

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Tue Mar 27, 2012 12:22 pm
by runner01
another quick question, what is the default tcp port that micromacro uses?

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Tue Mar 27, 2012 12:54 pm
by MiesterMan
Sorry, forgot about this thread. So I downloaded the game, a couple of times. After I finally got the install to go through it won't go past the loading screen. I tried turning down all settings but it had the same result.

Afraid I won't be able to help with this.

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Wed Mar 28, 2012 4:45 am
by runner01
Yeah they are picky about their video drivers/cards.

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Wed Mar 28, 2012 4:51 am
by runner01
ok maybe another question about writing to memory.
I'm trying to write these 2 chunks into memory:
the below is the code: But the game crashes... On the memory editor, everything is fine.
What am I doing wrong?

Code: Select all

addHPPoke = 0x0070BE0F;
dataHPPoke = {0xE9, 0xFB, 0x3F, 0x6, 0x00, 0x90};

addHP = 0x00DEFE0F;
dataHP = {0x8B, 0x58, 0x04, 0x89, 0x1D, 0x10, 0xEF, 0xDD, 0x00, 0x8B, 0x58, 0x4C, 0x89, 0x1D, 0x14, 0xEF, 0xDD, 0x00, 0x8B, 0x58, 0x08, 0x89, 0x1D, 0x18, 0xEF, 0xDD, 0x00, 0x8B, 0x58, 0x50, 0x89, 0x1D, 0x1C, 0xEF, 0xDD, 0x00, 0xEB, 0xDA, 0xE9, 0xDA, 0xBF, 0x91, 0xFF};

function memoryWriteCC(proc, address, msg)
local l_msg_len = table.getn(msg);
local l_char = nil;
for i=1, (l_msg_len) do
-- l_char = msg:byte(i)
printf("address: %x; value: %s\n", address + i - 1, msg[i]);
memoryWriteByte(proc, address + i - 1, msg[i])
end
-- memoryWriteByte(proc, address + l_msg_len, 0)
end

Code: Select all

memoryWriteCC(processName, addHPPoke, dataHPPoke);
memoryWriteCC(processName, addHP, dataHP);

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Wed Mar 28, 2012 9:57 am
by botje
MiesterMan wrote:Always looking for new games to play. What exactly changed about the game? Is it free to play? Did they add some crapshield like gameguard or punkbuster to go with it?

And what language was the script in? Autoit scripts can almost directly be converted into lua to work with micromacro without all the addon setup.
your welcome to help with my AION bot anytime man :P

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Wed Mar 28, 2012 1:30 pm
by Administrator
runner01 wrote:another quick question, what is the default tcp port that micromacro uses?
You should set the port with netOpenCon. The first argument should look like "0.0.0.0:1234".

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Fri Mar 30, 2012 3:03 pm
by vIndie
So I'm trying to create a client/server with MicroMacro but I'm not getting a connection. I've disable windows Firewall so I don't believe that is the problem. The netserver says waiting for connection and the netclient says attempting connection..

Here is the network server code:

Code: Select all

CNetworkServer = class(
	function (self)
		netPushKey("encryptionKey", "12345");
	end
);

function CNetworkServer:start()
	listen = netOpenCon("0.0.0.0", "default");
	
	if( netListen(listen) ~= 0 ) then
	  printf("Error making connection.\n");
	end	
	
	print("Waiting for a client...");
	 
	-- Lets wait until a client joins our server.
	netcon = netPollListen(listen);
	while(netcon == nil) do
	print("Waiting for a client...");
	  netcon = netPollListen(listen);
	  rest(100);
	end
	
	while(netPollMessages(netcon)) do
		-- remember, in our example, we sent: 12, "Hello my name is John Doe."
		local message = netGetMessage(netcon);
		local messId = message[1];

		printf("Received message: %s\n", messId);

		if (messId == 1) then
			--enterDNG();
		elseif (messId == 2) then
			--exitDNG();
		end	
	end
end

function netStart()
	netServer = CNetworkServer();
	if (netServer) then
		netServer:start();
	end
end

startMacro(netStart);
and here is the network client code:

Code: Select all

CNetworkClient = class(
	function (self)
		netPushKey("encryptionKey", "12345");
	end
);
	
function CNetworkClient:connect(ip)

	netcon = netOpenCon("encryptionKey");
	if( netConnect(netcon, ip) == 0 ) then
		print("Attempting connection...");

		-- We wait until our connection status is either an error, or a successful connection
		status = netConnectStatus(netcon);
		while( status == 0 ) do
			status = netConnectStatus(netcon);
		end
		if( status > 0 )then
			print("Connection success!");
			return true;
		else
			print("Connection failed!");
			return false;
		end
	else
		print("Error initializing connection.");
		return false;
	end

end

function CNetworkClient:sendNetMessage(messId)
    if (netcon ~= nil) then
      printf("Message (%i) sent to %s: %b\n", messID, ip, (netSendMessage(netcon, messId) == 0));
    end
end


function EnterDNG()
  sendNetMessage(1);
end

function ExitDNG()
  sendNetMessage(2);
end

function main()
	client = CNetworkClient();
	client:connect("128.0.0.1:62751");
	EnterDNG();
end

startMacro(main);


Re: Hi all, Is there a command to send and receive TCP messa

Posted: Fri Mar 30, 2012 3:41 pm
by Administrator
client:connect("128.0.0.1:62751");
I think that's your problem there. I think you meant 127.0.0.1. You should also specify the listen port in the server so you can be sure that you are attempting to connect to the right port.

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Fri Mar 30, 2012 3:45 pm
by vIndie
Administrator wrote:
client:connect("128.0.0.1:62751");
I think that's your problem there. I think you meant 127.0.0.1. You should also specify the listen port in the server so you can be sure that you are attempting to connect to the right port.
Thanks, that was a quick typo because I didnt want to paste my actual IP address. for the server it would just be 0.0.0.0:62751?

Would it be possible to use LuaSocket with MicroMacro?

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Fri Mar 30, 2012 3:46 pm
by Administrator
Yes, that looks right, and yes, you can use LuaSocket. Just put the main LuaSocket DLL in the plugins directory while any other dependencies (if available) will be placed in the MicroMacro root directory.

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Fri Mar 30, 2012 3:51 pm
by vIndie
and I'm an idiot...

Code: Select all

listen = netOpenCon("0.0.0.0", "default");
should have been

Code: Select all

listen = netOpenCon("0.0.0.0", "encryptionKey");
does the network provide any kind of error so that I would have known that it was the wrong encryption key?

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Fri Mar 30, 2012 4:11 pm
by vIndie
very basic but it works.

Code: Select all

CNetworkServer = class(
	function (self)
		netPushKey("encryptionKey", "12345");
	end
);

function CNetworkServer:start()
	listen = netOpenCon("0.0.0.0:62751", "encryptionKey");
	
	if( netListen(listen) ~= 0 ) then
	  printf("Error making connection.\n");
	end	
	while (1) do
		printf("Waiting for a client...");
		 
		-- Lets wait until a client joins our server.
		netcon = netPollListen(listen);
		while(netcon == nil) do
			printf(".");
			netcon = netPollListen(listen);
			rest(100);
		end
		printf("Connection success!\n");
	
		local messId = nil;
		while(netPollMessages(netcon)) do
			-- remember, in our example, we sent: 12, "Hello my name is John Doe."
			local message = netGetMessage(netcon);
			messId = message[1];

			printf("Received message: %s\n", messId);
		end
		
		if (messId == 1) then
			--enterDNG();
		elseif (messId == 2) then
			--exitDNG();
		elseif (messId == 3) then
			return;
		end	
	end
end

function netStart()
	netServer = CNetworkServer();
	if (netServer) then
		netServer:start();
	end
end

startMacro(netStart);

Code: Select all

CNetworkClient = class(
	function (self)
		self.ip = 0;
		self.netcon = 0;
		netPushKey("encryptionKey", "12345");
	end
);
	
function CNetworkClient:connect(ip)

	self.netcon = netOpenCon("encryptionKey");
	if( netConnect(self.netcon, ip) == 0 ) then
		printf("Attempting connection...");

		-- We wait until our connection status is either an error, or a successful connection
		status = netConnectStatus(self.netcon);
		while( status == 0 ) do
			printf(".");
			status = netConnectStatus(self.netcon);
		end
		if( status > 0 )then
			printf("Connection success!\n");
			self.ip = ip;
			return true;
		else
			printf("Connection failed!\n");
			return false;
		end
	else
		printf("Error initializing connection.\n");
		return false;
	end

end

function CNetworkClient:sendNetMessage(messId)
    if (self.netcon ~= nil) then
		printf("Message (%i) sent to %s: %s\n", messId, self.ip, (netSendMessage(self.netcon, messId) == 0));
		-- netSendMessage(self.netcon, messId);
    end
end

function CNetworkClient:close()
	netCloseCon(self.netcon);
end

function EnterDNG()
  client:sendNetMessage(1);
end

function ExitDNG()
  client:sendNetMessage(2);
end

function main()
	client = CNetworkClient();
	client:connect("127.0.0.1:62751");
	EnterDNG();
	client:close();
end

startMacro(main);


Re: Hi all, Is there a command to send and receive TCP messa

Posted: Fri Mar 30, 2012 5:20 pm
by Administrator
vIndie wrote:does the network provide any kind of error so that I would have known that it was the wrong encryption key?
Not really, no. "default" is always available, so that would be a "valid" encryption key. In the case that you used two different encryption keys, it would just result in a loss of data/malformed packets, but you should* be able to connect.

*I'm not entirely sure about this. I expect that the connection should open, but transmitting data wouldn't work.

Code: Select all

CNetworkServer = class(
   function (self)
      netPushKey("encryptionKey", "12345");
   end
);
This wouldn't work. Unless I made some changes that I forgot about, that is. netPushKey needs to be called from lib/net.lua. You should add an entry there instead, and make sure that this key exists (and is the same) on both the client and server side. The reason that this is a requirement is for your safety. This prevents someone from sneaking in some code that would send potentially sensitive information (username/password pairs or something) to the exploiter, as they wouldn't be able to use a valid encryption key to open the connection with (your default key is randomly generated user-side when MicroMacro is opened and the key does not exist).

Re: Hi all, Is there a command to send and receive TCP messa

Posted: Fri Mar 30, 2012 5:29 pm
by vIndie
Administrator wrote:Not really, no. "default" is always available, so that would be a "valid" encryption key. In the case that you used two different encryption keys, it would just result in a loss of data/malformed packets, but you should* be able to connect.

*I'm not entirely sure about this. I expect that the connection should open, but transmitting data wouldn't work.
Nope, I wasn't even getting a connection past the netConnectionStatus.
Administrator wrote:

Code: Select all

CNetworkServer = class(
   function (self)
      netPushKey("encryptionKey", "12345");
   end
);
This wouldn't work. Unless I made some changes that I forgot about, that is. netPushKey needs to be called from lib/net.lua. You should add an entry there instead, and make sure that this key exists (and is the same) on both the client and server side. The reason that this is a requirement is for your safety. This prevents someone from sneaking in some code that would send potentially sensitive information (username/password pairs or something) to the exploiter, as they wouldn't be able to use a valid encryption key to open the connection with (your default key is randomly generated user-side when MicroMacro is opened and the key does not exist).
Was working fine and sending/recieving data.

I've gotten LuaSocket working so I may use that instead, a bit more flexibility but no encryption built in. =\