auf welcher netzwerkkarte wird port gebinded
-
hi leute.
wisst ihr wie man festlegen kann, auf welcher netzwerkkarte mein port gebinded wird? der macht das immer auf meiner externen und nicht auf meiner internen wo ichs aber brauch
danke schonmal
-
Gib einfach bei bind die IP-Adresse des internen Adapters an. Übrigens, es heißt "gebunden".
-
MFK schrieb:
Übrigens, es heißt "gebunden".
sorry, aber ich dacht es wäre so aussagekräftiger.
MFK schrieb:
Gib einfach bei bind die IP-Adresse des internen Adapters an.
Ich nehme an, du meinst in der sockaddr_in struct. Bringt aber genauso wenig, er öffnets auf der falschen Karte, und connecten kann man ganich mehr
-
cMogli schrieb:
sorry, aber ich dacht es wäre so aussagekräftiger.
Und ich dachte, du hättest das Deutsch ausgesprochen. Mein Fehler

Ich nehme an, du meinst in der sockaddr_in struct. Bringt aber genauso wenig, er öffnets auf der falschen Karte, und connecten kann man ganich mehr
Was meinst du mit "Öffnen"? Beschreib doch mal die genau Netzerkkonfiguration und zeig ein wenig Code.
-
also, ich habe 2 netzwerkkarten in meinem rechner, (eine für extern eine für intern, wer hätte das gedacht ;))
ich möchte jetzt einen daemon schreiben (bzw. hab), der öffnet den port jetzt aber nur auf dem externen netzwerkkarteninterface. Es ist eigentlich egal ob er da offen is oder nich, aber er muss zusätzlich auf dem internen interface zu finden sein.
der code sieht so aus:sockaddr_in sai; sai.sin_addr.s_addr = INADDR_ANY; // hier hab ich schon inet_addr("192.168.0.2"); probiert sai.sin_port = htons(81); sai.sin_family = AF_INET; int sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == -1) return false; bind(sock, (sockaddr *)&sai, sizeof(sai)); listen(sock, 3); /*....*/sollte reichen erstma

danke für die hilfe

-
Sieht erst mal nicht schlecht aus. Was gibt bind denn zurück? Und was liefert dir getsockname nach dem bind?
-
sockaddr_in addr2; int lu = sizeof(addr2); int gsn = getsockname(sock, (sockaddr *)&addr2, &lu); char buf[1024]; printf("bind: %i\r\ngetsockname: %i\r\ngetsockname sin_addr: %s", err, gsn, inet_ntoa(addr2.sin_addr));output:
bind: 0
getsockname: 0
getsockname sin_addr: 192.168.0.2komisch, sogar da sagt ers richtige, aber er machts nich ....
-
cMogli schrieb:
komisch, sogar da sagt ers richtige, aber er machts nich ....
Woraus schließt du, dass er nichts macht? Was sagt netstat /a?
-
MFK schrieb:
Woraus schließt du, dass er nichts macht?
aus tcpview, und connectversuchen mit telnet
MFK schrieb:
Was sagt netstat /a?
das gleiche

-
Moment, passiert gar nichts, oder wird der Socket an den externen Adapter gebunden?
-
der socket wird aufs falsche interface gebunden (aufs externe)
mit telnet komm ich mit der externen ip nämlich drauf, bei der internen nicht.