CreateNetworkServer auf spezielles Interface beschränken?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

CreateNetworkServer auf spezielles Interface beschränken?

Beitrag von Didelphodon »

Hallo!

Mit dem PB-Befehl "CreateNetworkServer" installiert man einen Listener. Man hat aber keine Möglichkeit dabei das gewünschte Network-Interface auszusuchen. Mit "netstat -n -a" sieht man, dass auf 0.0.0.0 gelistened wird. Ich würd das ganze aber gerne auf 127.0.0.1 beschränken, was eigentlich ja auch gehen sollte.

Frage: Wie mach ich das am besten?

LG Didel.
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
manunidi
Beiträge: 109
Registriert: 12.04.2006 22:44

Beitrag von manunidi »

Interessante Frage! Kann uns das jemand beantworten, da ich das jetzt auch gebrauchen könnte...
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Wirklich ziemlich schwach, dass es nicht als Option unter PB möglich ist. *AscheAufMeinHaupt*

Dazu gibts bei Socket-Programmierung das Kommando bind(). Hab anfangs versucht, nach CreateNetworkServer() das bind() aufzurufen, ging aber - verständlich - in die Hose. Unter Windows geht's aber dennoch auf diese Art, also OHNE CreateNetworkServer(), über reine Sockets:

Code: Alles auswählen

#PORT = 2222
#WM_NETZWERK = #WM_USER + 100

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.sockaddr_in
addr\sin_family = #AF_INET 
addr\sin_port = htons_(#PORT) 
addr\sin_addr = inet_addr_("127.0.0.1"); 
bind_(sock,@addr,SizeOf(addr))
listen_(sock,0)
WSAAsyncSelect_(sock,WindowID(0),#WM_NETZWERK,#FD_ACCEPT|#FD_READ|#FD_CLOSE)

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      End
    Case #WM_NETZWERK
      MessageRequester("Server","Auf dem Port tut sich was!")
  EndSelect
ForEver
Das Message-Handling sollte dann jedoch über SetWindowCallback() realisiert werden.
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Beitrag von Didelphodon »

Danke, real!

Vielleicht könnte sich einer von den PB-Indianern ja mal diesem Thema für eine der nächsten Versionen annehmen?! :roll:

LG Didel.
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Hallo!

Ich verstehe das nicht so ganz... Moechtest du, dass nur Verbindungen von 127.0.0.1 angenommen werden?

Wenn ja, dann nimm doch den neuen GetIP() Befehl von PB 4 und pruefe damit die Adresse. Wie gesagt, ich verstehe das Topic nicht so ganz...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Beitrag von Didelphodon »

Es geht darum, das Interface auszuwählen, auf dem auf Port xy gehorcht werden soll. Sinnvollerweise macht man das z.B. für Anwendungen, die aus Teilen bestehen, die wiederum miteinander über TCP/IP kommunizieren. Damit dies nicht über das physikalische Interface (Netzwerkkarte) passiert (das wäre nämlich voll unnötig und noch dazu ein höheres Angriffsrisiko), kann sinnvollerweise dieses Horchen auf (in diesem Fall) 127.0.0.1 eingeschränkt werden. Bei 0.0.0.0 wird auf jedem Interface, das dem PC bekannt ist gehorcht!!

LG Didel.
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Antworten