Protokoll anhand der TCP-Pakete erkennen

Gast #2653808
Lesenswert?

Hallo,

ich hab ein Messegerät (R&S FSP Spektum-Analysator) das mit Hilfe einer 
proprietären DLL (rsib32.dll) von meinem PC aus mit einer Excel-Tabelle 
mit Marko mit dem Teil kommuniziert. Soweit so gut. Jetzt will ich aber 
keine Excel-Makros machen, sondern eher mit Python ö.ä.
Ich könnte versuchen mit der dll zu reden. Ein anderes Messgerät 
erwartet seine Befehle im ASCII Format per Telnet-Verbindung auf einem 
nicht-standard Port. Das hat bei dem Gerät hier nicht funktioniert. Ich 
hab die Kommunikation mal per Wireshark mitgehört.

Ich hoffe mit den Screenshots keine internen Firmendaten zu verraten 
(Ansonsten an die Admins hier: Bitte den Beitrag sicherheitshalber 
löschen...)
10.61.16.93 ist mein PC, 172.16.48.10 ist das Messgerät (sollten beides 
rein interne IP Adressen sein.
Das "*IDN?" im ersten Paket ist der eigentliche Befehl (VISA/GPIB, 
irgendwas standardisiertes in der Gegend), die Nutz-Bytes des tCP Pakets 
davor gehören zum Übertragungsprotokoll (00 00 01 00 90 00 03)
Der zweite Screenshot ist dann die Antwort vom Gerät, der dritte ist 
wieder ein Paket vom PC. Dann ist die Kommunikation erst mal vorbei.

Könnte es sein dass das Protokoll jemand erkennt? Mit ein bisschen Pech 
ist es natürlich was selbst gestricktes. Telnet hat auf jeden Fall nicht 
funktioniert...

Viele Grüße,
Angehängte Dateien:
Gast #2653812
Lesenswert?

ich würde es mit der dll versuchen, wenn das Makro mit der dll redet 
kommt man eventuell an den Quellcode des Makros ran. Dann sollte das mit 
der dll kein Problem sein. Man kann doch bestimm so eine dll auch von 
pyton aus nutzen.
Gast #2653865
Lesenswert?

> Mach mal im Wireshark "Follow TCP Stream"

siehe Anhang.

> der fsp sollte ganz normal per visa anzusteuern sein, dafür gibts auch
> interfaces für python...

Ich kenn micht mit dem Automatisierungs-Kram jetzt gar nicht aus... hast 
du einen Link damit ich den Einstieg finde? Beispiele von der 
Hersteller-Webseite waren immer eher für Visual Basic, oder sonst 
LabView. Für zweiteres hab ich keine Lizenz, ersteres wollte ich nicht 
lernen...
Angehängte Dateien:
Gast #2653867
Lesenswert?

asd schrieb:
> Hersteller-Webseite waren immer eher für Visual Basic, oder sonst
> LabView. Für zweiteres hab ich keine Lizenz, ersteres wollte ich nicht
> lernen...
aber an den beispielen sollte sich auch ohne genaus wissen der spache 
doch so viel erkennen lassen damit man die dll nutzen kann.
Gast #2653875
Lesenswert?

Gott ist das übel, was soll das werden ?

Agilent-Geräte lassen sich komfortabel mittels Agilent VEE ansteuern. 
Ähnliches müßte bei R&S-Geräten mit LabView möglich sein. Es ist dabei 
nicht zwingend notwendig Vee oder LabView zu benutzen, sondern es wird 
eine Bibliothek mitgeliefert, die sich z.B. für eigene VBA oder 
VisualBasic-Programme nutzen läßt.

Ansonsten unbedingt bei R&S auf der Homepage nach Treibern oder 
sonstigen Unterlagen nachschauen und den Support kontaktieren, auch wenn 
es 'nur' ein altes Second-Hand-Gerät sein sollte, werden sie Dir helfen.

Und mach Dich schlau, was GBIP ist; *IDN? z.B. ist ein Standardbefehl, 
für alle Geräte gleich welcher Marke.

Aber den Netzverkehr mitlesen, um daraus auf die verwendeten Befehle 
schließen zu können...
Gast #2654789
Lesenswert?

mit ctypes hab ich es jetzt geschafft die dll anzusprechen:
http://www.python.net/crew/theller/ctypes/tutorial.html
Problem gelöst. Vielen Dank an die Tippgeber.

Falls zukünftige jemand sucht:
1
from ctypes import *
2

3
serverHostIP = '172.16.48.10'            # aktuelle IP des FSP7
4
MAXSTRLEN = 250                  # Laenge des Standard-String-Puffers
5

6

7
print windll.kernel32.GetModuleHandleA # doctest: +WINDOWS
8

9
print 'vorm send'
10

11
#UD = RSDLLibfind("172.16.48.10", ibsta, iberr, ibcntl)
12
#short FAR PASCAL RSDLLibfind( char far *udName, short far *ibsta,
13
#                              short far *iberr, unsigned long far *ibcntl)
14
ibsta = c_short()
15
iberr = c_short()
16
ibcntl = c_ulong()
17
rs_handle = c_short()
18
# Pointer in DLL-Funktionen verwendet wie in: 
19
# http://www.python.net/crew/theller/ctypes/tutorial.html#id9
20

21
rs_handle = windll.rsib32.RSDLLibfind(serverHostIP,byref(ibsta),byref(iberr),byref(ibcntl))
22

23
print 'nach dem send'
24

25
print 'vorm send'
26
rs_status = windll.rsib32.RSDLLibwrt(rs_handle,"*IDN?",byref(ibsta),byref(iberr),byref(ibcntl))
27
print rs_status
28
print 'nach dem send'
29

30
print 'vorm lesen'
31
antwortstr = create_string_buffer('\000' * MAXSTRLEN)
32
rs_status = windll.rsib32.RSDLLibrd(rs_handle,antwortstr,byref(ibsta),byref(iberr),byref(ibcntl))
33
print rs_status
34
print 'nach dem lesen'
35
print repr(antwortstr.value)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren