Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?

Beitrag von AND51 »

Hallo,

Ich beschäftige mich derzeit mit meinem Linux Server und richte dort meinen Mailserver (Postfix) ein. Während ich mich so mit Linux beschäftige, begegne ich immer wieder Programmen, die nur an bestimmten Netzwerkschnittstellen lauschen. Beispielsweise lauschen die Programme Postgrey und Amavis nur am Loopback bzw. sie akzeptieren nur Verbindungen von der eigenen Maschine.

Meine Frage: Wie realisiert man sowas in PureBasic?

Mir fällt derzeit nur folgender Ansatz ein: Sobald eine neue Verbindung herein kommt, frage ich mit GetClientIP() ab, ob derjenige die Adresse 127.0.0.1 hat. Falls ja und ich will nur lokale Verbindungen akzeptieren, bediene ich die Verbindung. Falls nein, bekommt die Gegenseite mein CloseConnection() zu spüren.
Aber was, wenn ich mehr als 2 Netzwerkschnittstellen (1 Loopback, 1 externe IP) habe? Wie hänge ich mich dann nur an ausgewählte Schnittstellen?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?

Beitrag von jpd »

Hallo AND51,

Hier die antwort dazu.

http://www.purebasic.fr/german/viewtopi ... hilit=bind

in "Feature Requests and Wishlists"

wurde auch schon danach gefragt(möglicherweise auch mehrmals).

http://www.purebasic.fr/english/viewtop ... hilit=bind


Ciao
jpd
PB 5.10 Windows 7 x64
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?

Beitrag von AND51 »

Danke schön!

Ich wusste nicht, wonach ich suchen sollte, "Interface" lieferte mir haufenweise irreführender anderer Topics. Habe mir schon beinahe gedacht, dass sowas nicht möglich ist.
Ich habe mich gerade mal im englischen Forum in dem von dir verlinkten Topic beteiligt.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?

Beitrag von jpd »

Hallo AND51,

habe den beispiel von Real ein bisshien angepasst so das es auch unter Linux funktioniert.
Natürlich muss messaging selber handeln..

Ciao
jpd

Code: Alles auswählen

#PORT = 2222
#AF_INET = 2                  
#PF_INET = #AF_INET 
#SOCK_STREAM=1
#IPPROTO_TCP=6
#__x_sockaddr_COMMON_SIZE = 2 

Structure IN_ADDR 
    S_addr.l 
EndStructure 
Structure SOCKADDR
    sa_family.w
    sa_data.b[14]
EndStructure

Structure SOCK_ADDR 
    sin_family.w ;(unsigned short int) 
    sin_port.w;         /* Port number. 
    sin_addr.IN_ADDR ;      /* Internet address. 
    sin_zero.b[SizeOf(SOCKADDR)-#__x_sockaddr_COMMON_SIZE-SizeOf(WORD)-SizeOf(IN_ADDR)] ; Pad To size of `struct x_sockaddr' +8 
EndStructure      

OpenWindow(0,0,0,200,100,"Server auf 127.0.0.1",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

InitNetwork()
sock = SOCKET_(#AF_INET,#SOCK_STREAM,#IPPROTO_TCP)
addr.SOCK_ADDR
addr\sin_family = #AF_INET
addr\sin_port = htons_(#PORT)
addr\sin_addr\S_addr = inet_addr_("127.0.0.1")

bind_(sock,@addr,SizeOf(addr))
listen_(sock,0)


Repeat
    Event = WaitWindowEvent()
    Select Event
        Case #PB_Event_CloseWindow
            closesocket_(sock)
            End
            ;Case #WM_NETZWERK
            ; MessageRequester("Server","Auf dem Port tut sich was!")
    EndSelect
ForEver
PB 5.10 Windows 7 x64
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?

Beitrag von AND51 »

Recht herzlichen Dank!

Allerdings wollte ich erst mal nur fragen, wie das überhaupt geht. Am liebsten wäre es mir natürlich mit nativen PB-Befehlen. Ich bastele wie gesagt an meinem Linux-Server und wollte das hier mal wissen, für den Fall, dass ich mir da mal ein paar Addons für meinen Postfix-Mailserver programmieren will. Ideen habe ich schon... Naja und es ist naheliegend, dass (m)ein Addon nur auf der Loopback-Schnittstelle lauschen soll, für meinen Mailserver. Und nicht auch für externe Clients.

Mit Perl kenne ich mich nicht so gut aus, als dass ich es damit hinkriegen könnte. Meine "Muttersprache" ist und bleibt halt PureBasic. :mrgreen:
Der von dir verlinkte Request ist ja schon 5 Jahre alt. Ich glaube nicht, dass sich dahingehend auch schnell was tun wird. Möglicherweise sollte ich meine Perl-Kenntnisse doch erweitern und so mein Glück versuchen. Das ist schade, denn ich würde PureBasic gerne auf meinem Server für viele schöne Dinge einsetzen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten