PDA

View Full Version : RPG: Client Infos lesen?



Seiten : 1 2 [3]

robertki
17-01-07, 11:41
Mahlzeit,

habe jetzt folgende Idee: Ich kann doch mitttels SNMP Name und OS einer IP auslesen. Habe einen SNMP Get in RPG implementiert, aber leider funktioniert das irgendwie nicht. Also der Get wird abgesetzt (rc = 0) aber ich bekomme keine Daten? Hat einer von Euch ein Beispiel oder kann mir dabei helfen?

Rufe snmtpget api auf. Wo genau stehen die ausgelesenen Daten? Wie genau setze ich einen OID um?

Achso habe das hier benutzt: http://publib.boulder.ibm.com/iseries/v5r1/ic2924/index.htm?info/apis/unix6.htm

Frage dazu: muss ich vor snmtget ein socket öffnen?

Robert

Ok es funktioniert. Werde es wohl so machen: Erst eine SNMP Get Abfrage. Dadurch bekomme ich das OS. Dadurch kann ich dann entscheiden, ob es sich um einen Scanner (WinCE) oder einen PC (alles andere) handelt. Besten Dank Euch

Robert

Fuerchau
17-01-07, 11:59
Gute Idee, solange SNMP auf den Clients auch aktiviert ist.
Was bei deinen Scannern ja wohl der Fall ist.

DVE
17-01-07, 12:26
Hallo auch ein Vorschlag, "durch die Brust ins Auge".
Sofern ich verstanden habe, möchtest du wissen, über welche IP-Adresse man gerade arbeitet.

RTVJOBA JOB(&JOBNAM) USER(&JOBUSR) NBR(&JOBNBR)
CRTPF FILE(QTEMP/DATNAM) RCDLEN(132)
DSPLOG PERIOD((*AVAIL)) OUTPUT(*PRINT) +
JOB(&JOBNBR/&JOBUSR/&JOBNAM) MSGID(CPIAD09)
CPYSPLF FILE(QPDSPLOG) TOFILE(QTEMP/DATNAM) +
JOB(&JOBNBR/&JOBUSR/&JOBNAM) SPLNBR(*LAST)

Anschließend die Datei auswerten.
Die CPFMSG CPIAD09 enthält die IP-Adresse des Jobs.

Wie gesagt, DURCH DIE BRUST INS AUGE.

Gruß
DVE ;)

robertki
17-01-07, 15:20
Gute Idee, solange SNMP auf den Clients auch aktiviert ist.
Was bei deinen Scannern ja wohl der Fall ist.

Genau das könnte es auch wieder kippen. Anscheinend haben nicht alle Scanner SNMP angeschaltet. Mal schaun, im Moment sieht es gut aus :-)

Robert

Fuerchau
17-01-07, 16:17
Vielleicht könntest du die Quelle ja hier mal reinstellen ?
Dann hätten vielleicht alle was davon.

robertki
19-01-07, 08:42
Vielleicht könntest du die Quelle ja hier mal reinstellen ?
Dann hätten vielleicht alle was davon.

Hi Fuerchau,

hier der Code:



H DFTACTGRP(*NO) bnddir( 'QC2LE' )
D getsnmp PR 10I 0 ExtProc('snmpGet')
D pdu_ptr * value
D host_ptr * value options(*string)
D timeout 10I 0 value
D comm_ptr * value options(*string)
D comm_len 10I 0 value
D myvalds DS
D int_val 10I 0
D char_val *
D mychar_val S 90A based(char_val)
D varBind DS
D next * inz(*NULL)
D pOid * inz(%addr(oid))
D asnType 1a
D valLen 10i 0 inz(50)
D valPtr * inz(%addr(value))
D snmppdu DS
D pduType 1a
D errSts 10i 0
D errIdx 10i 0
D pVarBind * inz(%addr(varBind))
D x S 10i 0
D value S 50a
D oid S 50a
D msg S 52A
D pos S 10I 0
D host S 12a inz('192.168.1.39')
D cmty S 6a inz(x'7075626C6963')
D ASCII2EBCDIC C CONST( 'QTCPEBC' )
D EBCDIC2ASCII C CONST( 'QTCPASC' )
D Translate PR ExtPgm( 'QDCXLATE' )
D Length 5P 0 const
D Date 32766A options( *varsize )
D Table 10A const
D valend C '§'
/FREE
oid = x'f14bf34bf64bf14bf24bf14bf14bf14bf000';
// oid: .1.3.6.1.2.1.1.1
x = getsnmp(%ADDR( snmppdu): %addr(host):5:%addr(cmty):6);
if ( x <> 0 );
msg = 'SNMPGet error: ' + %char(x);
dsply msg;
else;
Translate(%size(value):value:ASCII2EBCDIC);
pos = %scan(valend: value) - 1;
if ( pos > 0 );
value = %subst(value:1:pos);
endif;
msg = value;
dsply msg;
pos = %scan('WindowsCE': value);
if ( pos > 0 );
msg = 'OS is WindowsCE';
endif;
dsply msg;
endif;
*inlr = *on;
/END-FREE


Viel Spaß damit. Robert