2012-10-16 13 views
5

Jeśli program działa na komputerze z systemem Linux, czy istnieje sposób, aby ten program skanował porty dozwolone przez zaporę ogniową? na przykład, jeśli programista chce stworzyć system czatu, ale program musi wiedzieć, jakich portów nie odmawia dostęp do połączeń przychodzących przez zaporę użytkownika, czy istnieje sposób sprawdzenia tego w swoim kodzie? Program może nie łączyć gniazda z portem, nawet jeśli zapora blokuje ten sam port przed połączeniami przychodzącymi. Czy istnieje sposób sprawdzenia otwartych portów zapory ogniowej?Dostęp do portu TCP i C++

Sidenote: Jest to wyłącznie do celów edukacyjnych i wolne od złych intencji, aby było jasne, piszę system czatu, a podczas testów nie byłem w stanie podłączyć komputera stacjonarnego-> laptopa, dopóki nie otworzyłem portu ręcznie, zezwalając przez moją zaporę ogniową. Wydawało mi się to trochę dziwne, w przeciwieństwie do czegoś, co kod programisty powinien wymagać od użytkownika. Nie wspominając już o tym, że nie chcę zostawiać tych kilku osób zagrożonych (jeśli opuszczenie portu na stałe otwiera się). Wygląda więc na to, że lepiej będzie znaleźć sposób na wykorzystanie portów, które są już otwarte na przychodzące połączenia TCP.

sidesidenote: wszyscy klienci są uruchomione fedora

+1

Sprawdź [UPnP] (http://en.wikipedia.org/wiki/Universal_Plug_and_Play). –

+1

Wybierz port o wysokim numerze i wykonaj port w inny sposób. Zapory ogniowe nie powinny blokować danych powyżej 32000. Oparta na UDP metoda łączenia z typowym portem (np. 1900) wykorzystywana przez inne usługi pozwala na ładowanie znanego portu, który prawdopodobnie będzie otwarty, w celu zapewnienia wykrywania dla dynamicznego portu używanego do TCP. –

+1

Nie sądzę, że można to zrobić niezawodnie tylko na samym serwerze. Bez użycia jakiegoś zdalnego serwera proxy, serwer nie może przetestować połączenia za pomocą zapory ogniowej. – Barmar

Odpowiedz

4

Natknąłeś na drugim co do wielkości emisji regulującego tworzenie nowych aplikacji internetowych w dzisiejszych czasach. Pierwszym co do wielkości jest oczywiście NAT, który jest ściśle powiązanym zagadnieniem (i miejmy nadzieję, że odejdzie w końcu z powodu IPv6).

I nie ma łatwej odpowiedzi. Jedną dobrą odpowiedzią jest UPnP, ale nie jest to łatwa odpowiedź, a nie uniwersalna. Moja sieć go nie obsługuje.

Inną odpowiedzią jest jakoś tunelować wszystko, co robisz, przez https (lub http, jeśli musisz). Ale to jest ogromny problem z czymś takim, jak aplikacja do czatu.

Powiązane problemy