Что нового

Отправка пакетов

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Добрый день.
Прошу помочь с такой проблемкой: пытаюсь повторить отправку пакета из jar скрипта на яве, но сервер их не понимает, т.к. они слегка отличаются.
При отправке пакета из оригинального jar скрипта к пакету в начале добавляется какая-то информация, скорее всего его длинна.
Выглядит это так:
Код:
SOHSTX"мои данные"
Если изменить данные, то информация в начале пакета меняется на всякие SOHZ SOH? SOH`
Ява отправляет информацию параметром DataOutputStream
Помогите пожалуйста разобраться куда копать, чтобы скорректировать отправку.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Dellroc
Причём тут Autoit?
 
Автор
D

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Пытаюсь сделать аналог этого явовского скрипта на AutoIt, чтобы его дополнить и исправить как мне нужно.


Добавлено:
Сообщение автоматически объединено:

Добавляю кусок кода явы и мой кусок
Код:
import com.sun.security.auth.module.NTSystem;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
public class Connection
{
  public static final String clientVersion = "0.1b|";
  
  public Connection() {}
  
  public static void main(String[] args)
    throws IOException, InterruptedException
  {
    StringBuilder sb = new StringBuilder();
    
    for (String arg : args) {
      sb.append("\"" + arg + "\" ");
    }
    
    NTSystem nts = new NTSystem();
    String login = nts.getName();
    String domain = nts.getDomain();
    String domainsid = nts.getDomainSID();
    String paramsString = sb.toString().trim();
    byte[] bytes = paramsString.getBytes("windows-1251");
    String str = new String(bytes, "windows-1251");
    try
    {
      Socket socket = new Socket(InetAddress.getByName(getInstanceSERVER), getInstancePORT);
      LogWriter.getLogger().write("Connected to server: " + getInstanceSERVER + ":" + getInstancePORT);
      
      DataInputStream dIs = new DataInputStream(socket.getInputStream());
      DataOutputStream dOs = new DataOutputStream(socket.getOutputStream());
      
      dOs.writeUTF(str);
      LogWriter.getLogger().write("Sended: " + sb.toString().trim());
      
      String resp = dIs.readUTF();
      byte[] bytes1 = resp.getBytes();
      String str1 = new String(bytes1, "windows-1251");
      
      LogWriter.getLogger().write("Request: " + str1);
      
      dOs.flush();
      dOs.close();
      socket.close();
      
      LogWriter.getLogger().write("Disconnected");
    } catch (SocketException se) {
      LogWriter.getLogger().write(se.getMessage() + " SERVER: " + getInstanceSERVER + ":" + getInstancePORT);
    }
  }
}
Код:
HotKeySet("{ESC}", "_exit")
Func _exit()
	TCPShutdown()
	Exit
EndFunc ; _exit

Example()

Func Example()
	TCPStartup()
	Local $ConnectedSocket = -1, $szData
	Local $NetIP = '192.168.1.40'
	Local $NetPort = 6666
		$ConnectedSocket = TCPConnect($NetIP, $NetPort)
		If @error Then
			MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
			_exit()
		EndIf
		$szData = '"FromSystem" "Create" "моё сообщение"'
		If @error Or $szData = "" Then _exit()
		TCPSend($ConnectedSocket, StringToBinary($szData,4))
EndFunc

Func OnAutoItExit()
    TCPShutdown()
EndFunc

Вот такое сообщение получает сервер. У меня не получается его повторить.
 

Вложения

  • 1.jpg
    1.jpg
    3.6 КБ · Просмотры: 8
Автор
D

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Если кому пригодится, то решил вопрос. Данные перед отправкой делаю в правильный бинарный вид этой функцией:
Код:
Func CreatePaket($tData)
	Return '0x'&Hex(Number(StringLen(StringTrimLeft(StringToBinary($tData,4),2))/2,1),4)&StringTrimLeft(StringToBinary($tData,4),2)
EndFunc
 
Верх