Приведите несколько примеров состояния TCP-соединения в JT400 - JAVA

Я попытался получить статус TCP-соединения AS400. но я потерпел неудачу :( может ли кто-нибудь помочь мне сделать это. Я новичок в разработке Java для JT400. Пожалуйста, помогите мне, друзья.

  1. я хочу получить IP адрес работы
  2. я хочу получить статус TCP-соединения, используя этот (1) IP-адрес.

Пожалуйста, помогите мне Спасибо!

Редактировать :

я получил этот класс

com.ibm.as400.util.commtrace.TCPHeader

Это возвращает эту информацию

getACKFlag()
getAckNum()
getCheckSum()
getCWRFlag()
getDataOffset()
getDstPort() ..etc

теперь я хочу получить эту информацию. это означает, как получить статус TCP, используя этот класс.

Помогите мне, пожалуйста

Благодарю вас


person Dzshean    schedule 06.05.2013    source источник
comment
пожалуйста, помогите мне, друзья .. дайте мне небольшое представление об этом   -  person Dzshean    schedule 06.05.2013
comment
Пожалуйста, отредактируйте свой вопрос, чтобы привести несколько примеров состояния TCP-соединения.   -  person Buck Calabro    schedule 06.05.2013


Ответы (2)


Классы commtrace не работают в режиме реального времени. Они используют файл трассировки, созданный на сервере IBM i ранее. Чтобы создать этот файл трассировки, см. Javadoc для com .ibm.as400.util.commtrace.CommTrace В основном вам потребуется выполнить команды IBM i STRCMNTRC, ENDCMNTRC и DMPCMNTRC. Затем используйте commtrace.CommTrace, чтобы создать файл трассировки, отформатированный так, чтобы другие классы commtrace могли его прочитать.

EDIT: добавьте фрагмент кода из commtrace.Format Javadoc

import java.util.*;
import com.ibm.as400.access.*;
import com.ibm.as400.util.commtrace.*;

public class TestCommTrace {
    public static void main(String[] args) {

try {
 Format f = new Format("/buck/linetrace");

 FormatProperties fmtprop = new FormatProperties();
 f.setFilterProperties(fmtprop); // Sets the filtering properties for this Format

 f.formatProlog(); // Format the prolog
 Prolog pro = f.getProlog();    
 System.out.println(pro.toString());

 if(!pro.invalidData()) { // This is not a valid trace
         Frame rec; 
         while((rec=f.getNextRecord())!=null) { // Get the records
                System.out.print("Frame " + rec.getRecNum().toString()); // Print out the Frame Number
                System.out.println(" time " + rec.getTime().toString()); // Print out the time
                IPPacket p = rec.getPacket(); // Get this records packet
                Header h = p.getHeader(); // Get the first header
                if(p.getType()==IPPacket.IP4) { // If IP4 IPPacket
                        if(h.getType()==Header.IP4) { // If IP4 Header
                                IP4Header ip4 = (IP4Header) h; // Cast to IP4 so we can access methods
                                System.out.println(h.getName()); // Print the name
                                System.out.println("IP4 src:"+ip4.getSrcAddr() + " dst:" + ip4.getDstAddr());
                                System.out.println(ip4.printHexHeader()); // Print the header as hex 
                                // Print a string representation of the header.
                                System.out.println(ip4.toString()); // hex string
                                //System.out.println(ip4.toString(fmtprop)); // very detailed
                                while((h=h.getNextHeader())!=null) { // Get the rest of the headers
                                        if(h.getType()==Header.TCP) { // If its a TCP header
                                                TCPHeader tcp = (TCPHeader) h; // Cast so we can access methods
                                                System.out.println("TCP src:" + tcp.getSrcPort() + " dst:" + tcp.getDstPort() + " checksum:" + tcp.getCheckSum()); 
                                                System.out.println(tcp.toString());  // hex string
                                                //System.out.println(tcp.toString(fmtprop));  // very detailed

                                        } else if(h.getType()==Header.UDP) { // If its a UDP header
                                                UDPHeader udp = (UDPHeader) h; // Cast so we can access methods
                                                System.out.println("UDP src:" + udp.getSrcPort() + " dst:" + udp.getDstPort()); 
                                                System.out.println(udp.toString());
                                        }
                                }
                        }
                }
         } 

 f.close();
 }      
    } catch (Exception e) {
      e.printStackTrace();
    }
}

}

EDIT: более подробная информация

1) В системе IBM кто-то со специальными полномочиями должен запустить STRCMNTRC и собрать информацию о трассировке связи. Этот файл трассировки содержит все TCP-пакеты, которые передавались между системой IBM и внешним миром. Например, если трассировка выполняется в течение часа, она будет собирать все пакеты, отправленные и полученные системой в течение этого часа. Данные трассировки хранятся в специальном формате и не могут быть прочитаны напрямую.

2) Чтобы сделать данные трассировки доступными для чтения, используйте команду DMPCMNTRC. Это создаст простой файл текстового потока из данных трассировки. Эти данные должны попасть на ваш компьютер, чтобы com.ibm.as400.util.commtrace классы могли с ними работать.

3) На вашем ПК запустите com.ibm.as400.util.commtrace.CommTrace. Это создаст файл в простой текстовой форме, которую com.ibm.as400.util.commtrace сможет обработать. Я поставил свой в /buck/linetrace. Важно понимать, что в этом журнале сотни или тысячи пакетов, и каждый из них содержит информацию, о которой вы спрашиваете в вопросе. Нет ни одного флага ACK, их много сотен. Чтобы понять, что происходит, ваша программа должна будет прочитать пакет, получить заголовок, затем статус, получить данные, а затем прочитать следующий пакет, и еще, и еще, и так до конца.

4) Для фильтрации по IP-адресу вы можете либо использовать setFilterProperties(), либо ваш код проверяет IP-адреса в каждом заголовке пакета и обрабатывает только те заголовки, которые вы хотите.

Важно понимать, что «статус», который вы ищете, не является свойством IP-адреса, это свойство TCP-пакета. Невозможно запросить у системы флаг ACK IP-адреса, потому что нет такого возвращаемого свойства. Единственный способ получить эти данные — записать их в тот момент, когда пакет считывается или записывается системой.

Я был бы очень удивлен, если бы вам действительно понадобились эти флаги; почти никто не делает. Обычно «состояние подключения» означает способ определить, работает машина или нет. ping — типичный ответ на этот вопрос, но не все машины ответят на пинг. Для этих машин лучше всего попытаться подключиться к машине и порту, которые вы хотите протестировать.

person Buck Calabro    schedule 07.05.2013
comment
@ Бак Калабро - Друг, я что-то не могу понять. Вы можете привести мне пример? Благодарю вас! - person Dzshean; 07.05.2013
comment
Я бы хотел, чтобы у меня было время написать код для вас, но моя работа очень занята! Вы не сможете использовать класс commtrace.TCPHeader для получения состояния задания, которое выполняется прямо сейчас. Этот класс предназначен для помощи в анализе содержимого трассировки связи. - person Buck Calabro; 07.05.2013
comment
если вы можете написать образец, это очень полезно для меня, друг. я пытаюсь это сделать. но чего-то не хватает. я не могу этого понять. снова и снова я буду пытаться. я новичок в этом JT400. спасибо :) - person Dzshean; 07.05.2013
comment
Пожалуйста, отредактируйте свой вопрос. Опубликуйте каждый шаг, который вы сделали. Опубликуйте код, который вы пытаетесь. Опубликуйте точную ошибку, которую вы получаете. Это нормально быть новичком. Легче исправить код, чем научить его! - person Buck Calabro; 07.05.2013
comment
@ buck , спасибо, мой друг. Большое спасибо. бакс у меня 1 проблема. где место для вставки HOSTNAME,USER,PASS ?? а что это за /buck/linetrace??? извини за это бакс. пожалуйста, скажи мне это друг. Спасибо тебе друг - person Dzshean; 09.05.2013
comment
/buck/linetrace следует инструкциям по ссылке на com.ibm.as400.util.commtrace.CommTrace, которая находится в ответе. HOSTNAME,USER,PASS для этого не используются. - person Buck Calabro; 09.05.2013
comment
Привет, Бак, друг, тогда как мне получить данные TCP моего собственного сервера без сведений о регистрации сервера (ИМЯ ХОСТА, ПОЛЬЗОВАТЕЛЬ, ПАРОЛЬ). я имею в виду систему as400. чтобы получить сведения о задании и сведения о пользователе, я использовал HOSTNAME, USER, PASS, но как получить TCP без подключения. как найти свою ссылку /buck/linetrace ?? Спасибо тебе друг - person Dzshean; 13.05.2013
comment
и как искать эту информацию, используя IP-адрес. пожалуйста, помогите мне бакс. ты единственный друг, который поможет мне. Извините за мой плохой английский :( - person Dzshean; 13.05.2013
comment
buck , /buck/linetrace — это локальный путь трассировки или путь трассировки сервера? - person Dzshean; 01.08.2013
comment
STRCMNTRC, ENDCMNTRC и DMPCMNTRC выполняются на платформе IBM i. Системный администратор IBM должен дать вам право использовать эти команды. Файл '/buck/linetrace' создается на моем ПК при запуске com.ibm.as400.util.commtrace.CommTrace. - person Buck Calabro; 01.08.2013
comment
buck, если у меня есть права администратора, то как запустить эти команды (STRCMNTRC, ENDCMNTRC и DMPCMNTRC) для создания, сделать доступным для чтения (создать файл плоского текстового потока) и передать его на локальный ПК? Большое спасибо за советы и ответы :) - person Dzshean; 01.08.2013
comment
Самый простой способ запустить команды — открыть эмулятор 5250, подключиться к IBM i, войти в систему и ввести имя команды в командной строке, а затем нажать F4 для получения дополнительной помощи. Вы действительно должны попросить своего системного администратора показать вам, как это работает. - person Buck Calabro; 01.08.2013
comment
buck, могу ли я запустить эти команды с помощью своего Java-приложения? (создайте файл трассировки, преобразуйте его в текстовый файл с плоским потоком и сохраните его на локальном ПК) есть ли способ сделать это в приложении Java? - person Dzshean; 01.08.2013
comment
И каков путь? я имею в виду, как вызвать эту команду. и создать файл трассировки и сохранить его на моем ПК? - person Dzshean; 01.08.2013
comment
CommandCall JT400 может сделать это. javadoc.midrange.com/jtopen/com/ibm/as400/ доступ/ - person Buck Calabro; 01.08.2013
comment
давайте продолжим это обсуждение в чате - person Dzshean; 01.08.2013
comment
Используя этот класс, я могу запускать команды. но как изменить и установить путь к файлу трассировки? сохранить на комп? - person Dzshean; 01.08.2013
comment
Команда = STRCMNTRC Система AS400 = новая система AS400 (СИСТЕМА); Команда CommandCall = новый CommandCall (система); if (command.run(STRCMNTRC) != true) { System.out.println(команда не выполнена!); } system.disconnectService(AS400.COMMAND); - person Dzshean; 01.08.2013
comment
Используйте java com.ibm.as400.commtrace.Commtrace для обработки файла трассировки, созданного DMPCMNTRC. - person Buck Calabro; 01.08.2013
comment
buck, если у вас есть пример кода для вызова команды и создания файла трассировки, преобразуйте его в текстовый файл с плоским потоком и сохраните на локальном ПК. как использовать Java com.ibm.as400.commtrace.Commtrace? пожалуйста дай мне. это очень полезно для меня. я хочу научиться этому. благодарю вас - person Dzshean; 02.08.2013
comment
Вы опубликовали хороший пример CommandCall. У меня нет примера для Commtrace. Я предлагаю вам попробовать. Если у вас есть проблемы, создайте еще один вопрос и опубликуйте код, который вы пробовали. - person Buck Calabro; 02.08.2013
comment
Спасибо бак. Ваш совет очень полезен для моей работы. Огромное спасибо. Я попробую еще раз найти Commtrace. надеюсь на вашу помощь в будущем: D - person Dzshean; 02.08.2013
comment
buck, друг, если можно, проверьте это ссылка и скажите, правильно ли она. это большой код. я не могу понять это правильно - person Dzshean; 02.08.2013
comment
Ссылка, которую вы разместили, является источником для Commtrace. Вы не хотите этого, если не планируете изменить это. Чтобы использовать эту утилиту, см. Javadoc по адресу javadoc.midrange. .com/jtopen/com/ibm/as400/util/commtrace/ - person Buck Calabro; 02.08.2013
comment
привет, друг, я запустил эту команду на STRCMNTRC CFGOBJ(LKTEST2) CFGTYPE(*LIN) MAXSTG(128K) - person Dzshean; 02.08.2013
comment
привет, я запустил эту команду на STRCMNTRC CFGOBJ(LKTEST2) CFGTYPE(*LIN) MAXSTG(128K). Я подключен к эмулятору 5250 и запускаю эти команды. но файл не создан :( если вы знаете, как это сделать, скажите, пожалуйста, можете ли вы сказать мне, как это сделать? - person Dzshean; 02.08.2013
comment
Лакмаль, прочитай ответ еще раз. Шаг 1 — STRCMNTRC, шаг 2 — DMPCMNTRC, шаг 3 — Commtrace. Вам нужно выполнить все шаги, чтобы получить файл. - person Buck Calabro; 02.08.2013
comment
Бак, пожалуйста, проверьте это изображения. это моя проблема 1. я заполнил подробную информацию о файле трассировки связи. проверьте эту ссылку для скриншота 2. и я нажимаю ввод. после того, как он показывает это описание строки ошибки TESTFILE not found. это сообщение об ошибке ссылка 3. Пожалуйста, проверьте это ссылка Я НЕ ЗНАЮ, КАК ПРАВИЛЬНО ЗАПОЛНИТЬ ЭТУ ИНФОРМАЦИЮ ПОЖАЛУЙСТА, ПОМОГИТЕ ДРУГУ. БЛАГОДАРЮ ВАС - person Dzshean; 02.08.2013
comment
Бак, ты видел эту ошибку? Команда не удалась! Описание линии MYTEST не найдено. Можете мне помочь, пожалуйста? - person Dzshean; 03.08.2013
comment
Вещи, о которых вы спрашиваете, очень специфичны для вашей машины. Эти данные необходимо получить у системного администратора. - person Buck Calabro; 03.08.2013
comment
buck, могу ли я получить статус TCP-соединения без использования файла IFS. мне нужны только детали IPV4. я хочу получить сведения об этом окне скриншот - person Dzshean; 05.08.2013
comment
Да. Используйте API QtocLstNetCnn. У меня нет примера Java. Если бы я делал это, я бы написал хранимую процедуру SQL в RPG, которая возвращала бы набор результатов, который я мог бы затем предоставить программе Java. - person Buck Calabro; 05.08.2013
comment
Работа с параметрами Тип состояния подключения IPv4, нажмите Enter. 3=Включить отладку 4=Конец 5=Отображать подробности 6=Отключить отладку 8=Отображать задания ---||||- Могу ли я использовать QtocLstNetCnn API в java? Я хочу получить все IP-адреса IPV4 и сведения об IP-адресах (вариант 5) и отобразить задание этого IP-адреса (вариант 8). Могу ли я получить эти данные, используя этот класс на Java? без создания файла IFS? - person Dzshean; 05.08.2013
comment
Я думаю, вы можете использовать QtocLstNetCnn в Java. Файлы IFS не нужны, но вам нужно будет создать пользовательское пространство для хранения списка. javadoc.midrange.com/jtopen/com/ibm/as400/ access/UserSpace.html У меня нет подобных примеров Java. Вот пример Java другого API, который я нашел в Интернете: java2s.com/Open-Source/Java/Net/jtopen-7.0/com/ibm/as400/access/ Удачи! - person Buck Calabro; 05.08.2013
comment
спасибо большое бакс. ваша помощь очень важна для меня. Вы можете проверить эту ссылку и скажи мне, могу ли я делать свою работу, используя это? большое спасибо :D - person Dzshean; 06.08.2013
comment
Эта ссылка не является тем же API. Вы можете использовать это для идей по реализации необходимых вам API. - person Buck Calabro; 06.08.2013
comment
давайте продолжим это обсуждение в чате - person Dzshean; 06.08.2013
comment
спасибо бак, мой друг, я начал новый вопрос. Это ссылка, помогите мне найти образец . большое спасибо :D - person Dzshean; 06.08.2013

Чтобы получить IP-адрес задания:

System.out.println("IP address " + job.getValue(job.CLIENT_IP_ADDRESS));
person Buck Calabro    schedule 06.05.2013