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?
Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?
Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Re: Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?
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
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
Re: Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?
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.
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
Re: Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?
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
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
Re: Wie nur an bestimmten Netzwerk-Schnittstellen lauschen?
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.
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.
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.
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