Elektroda.pl
Elektroda.pl
X
e-miernikie-mierniki
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

INTERNET/UDP - Próba przesłania i odebrania pakietu UDP

27 Gru 2014 21:41 3555 23
  • Poziom 24  
    Witam
    Nie wiem czy piszę w dobrym dziale ale męczę się już drugi tydzień z pakietami UDP.
    Może od początku:

    Mam dwa komputery. Jeden w Gdańsku , drugi w Gdyni (ale to mniej ważne)


    Mam zamiar przesyłać z jednego komputera do drugiego pakiet UDP o treści <TEST>
    Komputer który odbierze ten pakiet ma natychmiast odpowiedzieć na adres i port nadawcy <OK>.

    Chodzi o to że tworzę u siebie w domu sterownik ogrzewania i chcę mieć do niego zdalny dostęp praktycznie z całego kraju. Chciałbym mieć możliwosć np. zdalnej regulacji temperatury itd.
    Program w moim sterowniku mam napisany w C i działa bez zarzutu.

    W tym momencie mój sterownik mam podłączony pod neostradę plus/router FUNBOX. W routerze mam przekierowane DMZ na IP mojego sterownika.
    Kiedy wysyłam pakiet UDP o odpowiedniej treści w sieci LAN to mój sterownik pięknie odbiera pakiety(polecenia) i odsyła na adres i port nadawcy odpowiedź. Ale kiedy dane przychodzą z sieci internet to owszem mój moduł odbiera dane poprawnie i odsyła je na adres IP i port nadawcy lecz zdalny komputer który nadał polecenie go nie odbiera. Tak jakby router blokował nadawanie pakietu.

    Dla testów użyłem na obu komputerach programu do testowania UDP (UDP TEST TOOL) .
    Kiedy z sieci internet wyślę jakikolwiek tekst na adres mojego komputera w sieci LAN w której pracuje także mój sterownik ogrzewania to program poprawnie odbiera dane. Ale kiedy chcę wysłać coś do sieci INTERNET z tego komputera to na zdalny komputer nic nie przychodzi.

    Tak więc wydaje mi się że problemem jest tu mój router.

    Nie znam się jeszcze aż tak dobrze na tym dlatego pytam kolegów co robię nie tak i w którym miejscu.
    Dodam że przekierowywałem porty w routerze ale nic to nie daje. W zasadzie jeśli ustwaiam w routerze DMZ to przekierowania portów nie powinny być potrzebne.


    Nie chciałbym stosować połączenia TCP i za każdym razem zestawiać na nowo połączenie.
    Ja chciałbym po prostu wysłać <TEST> z komputera(tabletu etc) do mojego sterownika i otrzymać odpowiedź.

    Co powinienem zrobić , albo jak zabrać się za takie zagadnienie. Czy na prawdę poprzez UDP się nie da?

    W tej chwili robię tak w programie UDP TEST TOOL:

    Komputer u mnie w domu:

    INTERNET/UDP - Próba przesłania i odebrania pakietu UDP

    Komputer w Gdyni:

    INTERNET/UDP - Próba przesłania i odebrania pakietu UDP


    Jak widać kiedy wysyłam dane z gdyni to je poprawne odbieram ale kiedy próbuję coś z domu odesłać na ten komputer to nic nie dochodzi.

    Czy w drugim komputerze(routerze) także muszę ustawić DMZ ? Jeśli tak to masakra. Przecież chcę mieć dostęp do mojego sterownika ogrzewania z całego kraju. A przecież nie będę konfigurować routerów wszędzie :P
    Owszem w domu mogę wszystko ustawić / przekierować ale na zewnątrz to musi chodzić i tyle bez jakiegokolwiek przekierowywania itp.

    Co mam zrobić i o jaki typ transmisji muszę oprzeć moje połączenie. Chodzi o maksymalnie proste . Nie chcę używać do tego celu przeglądarek WWW. Mam swoje aplikacje i to one mają załatwiać wszystko. A w chwili obecnej mogę sterować ogrzewaniem zdalnie ale nie mam potwierdzenia co się w nim dzieje.
  • e-miernikie-mierniki
  • VIP Zasłużony dla elektroda
    Czy sterownik ma ustawione IP routera jak bramę domyślna ?
  • Poziom 24  
    Tak. Oto jego ustawienia:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ale dla testu odłączyłem ten moduł (z obawy że to w nim tkwi problem) i teraz testuję to na PC. Oczywiście teraz DMZ przestawiłem na adres PC.

    Myślałem że może problem tkwi w adresie MAC mojego modułu i znalazłem starą kartę sieciową i z niej zczytałem adres MAC i wpisałem do mojego programu. Bez rezultatu jednak.
  • Pomocny post
    VIP Zasłużony dla elektroda
    Powyżej jest tylko adres MAC i IP.
    Brakuje jeszcze maski i bramy domyślnej.
  • Poziom 24  
    Brama domyślna jest ustawiona. A maski w tym programie nie ustawiam.
    Ale pomińmy na razie mój program w sterowniku. Zanim zacznę go pisać do końca to chciałbym przetestować działanie przesyłania danych za pomocą jakiegoś programu na PC pod windowsem (w moim wypadku Win7).
    Teraz używam UDP TEST TOOL ale nie mogę nawiązać przesyłu w obie strony. Może ten program jest lipny a może to wina routera.
    Znacie jakiś sprawdzony program aby przetestować to?
  • e-miernikie-mierniki
  • Pomocny post
    Poziom 31  
    Podejrzewam ze problem jest w tym ze dwa komputery masz za NAT'em i sterownik owszem odpowiada prawidlowo ale na adres ip z jakiego wyslal.
    Zeby prawidlowo dzialalo to bys musial porty przekierowac po obu stronach albo zeby program nie zamykal polaczenia udp. Jak jest zestawione to da sie odpowiedziec.

    Sprawdz przy dmz po obu stronach. Jak bedzie dzialac to najlepiej po prostu tam gdzie jest sterownik postawic serwer vpn na routerze a z innych kompow sie laczyc. Wtedy bedzie jakbys byl w sieci lokalnej i nie musisz sie bawic w przekierowania portow
  • Pomocny post
    Specjalista Sieci, Internet
    Próbowałeś wyłączyć firewall na funboxie?
  • Pomocny post
    Poziom 1  
  • Poziom 24  
    Heinzek napisał:
    Próbowałeś wyłączyć firewall na funboxie?

    Tak , ale nie mam możliwości wyłączenia całkowitego. Co prawda można skonfigurować zaporę ręcznie ale nie wiem jak to dokładnie zrobić i co i jak przekierować. Próbowałem i traciłem nawet połączenie z internetem. Chyba że Wiecie co powinno być ustawione aby chodził internet,poczta i utorrent.

    smario11 napisał:
    Zeby prawidlowo dzialalo to bys musial porty przekierowac po obu stronach albo zeby program nie zamykal polaczenia udp. Jak jest zestawione to da sie odpowiedziec.


    No właśnie muszę komunikować się w jakiś sposób tak aby przekierowania były wymagane jedynie po jednej stronie(tej po której jest sterownik ethernetowy)
    Nie wiem jakim typem i protokołem komunikacji muszę się zainteresować.
    Wiem że takie sterowanie jakie chciałbym osiągnąć mógłbym zrealizować poprzez przeglądarkę internetową ale tego chciałbym uniknąć. Mam napisane w B4A ładne aplikacje do sterowania moim systemem i to te aplikacje chciałbym dostosować do swoich potrzeb. Ale nie wiem o jaki protokół powinienem się oprzeć.
    Z sieci internet muszę się łączyć z moim systemem w taki sposób aby po stronie zewnętrznej nie musieć nic przekierowywać. Bo przecież będąc na mieście i korzystając np. z internetu dostępnego w jakiejś kawiarni (np.FUNSPOT) nie będę miał możliwości konfiguracji routera. Będę miał udostępnione jakieś (przeważnie słabe) połączenie z internetem i to wszystko. W ręce będę miał np. tablet i na nim jakąś aplikację która wyśle w jakimś protokole polecenie(string) i będzie musiała odebrać odpowiedź. I tu tkwi największy problem.

    jurek.adam napisał:
    Nie chcesz stosować TCP, ale przy tym protokole w razie czego transmisja jest ponawiana, a przy UDP nie. Do takiego zastosowania darowałbym sobie UDP.


    Jeśli będzie taka potrzeba to oczywiście mogę przejść na TCP. Mnie jedynie lekko przeraża konieczność zestawiania połączenia. Testowałem sobie z rok temu i TCP i UDP i jakoś bardziej przypadł mi UDP. Ale to ze względu tylko i wyłącznie prostoty obsługi w sieci LAN i także z tego powodu że posiadałem biblioteki na AVR do tego celu.
    Tak bardzo upierałem się (już mi przeszło) także z tego względu że posiadam książki o mikrokontrolerach AVR kolegi Mirekk36 i sam autor upiera się że komunikacja UDP działa bezbłędnie i to z każdego miejsca bez jakiegokolwiek przekierowywania etc. - mi jakoś nie działa i z tego co widzę to nie ma mozliwości aby działała z sieci internet. W LAN-ie owszem działa i to pięknie ale z zewnątrz nie.Może to wina mojego routera? Możliwe , ale nie mam za bardzo na to wpływu i muszę szukać rozwiązania w innym miejscu gdyż za dużo już czasu zmarnowałem stojąc w miejscu.)

    jurek.adam napisał:
    PS. Na swoich routerach/komp. ten port musisz odblokować (przekierowanie lub DMZ).


    A co zrobić właśnie aby nie musieć przekierowywać niczego na kompie w sieci internet? Jaki protokół załatwi mi tą sprawę.
    Wiem że piszę może śmiesznym językiem ale ta dziedzina jest dla mnie nowa i bardzo trudna. Owszem czytam wszystko co ma związek z tematem ale ze zrozumieniem już gorzej. Jedno dobre że mam z domu dwa różne połączenia z internetem (co prawda dostawca jest jeden -ORANGE/dawne TPSA- ale są to dwa różne połączenia). Mam dostęp poprzez wifi do internetu z biura w którym pracuję więc mogę sobie testować komunikację w jednym pokoju na dwóch różnych komputerach.

    Dodano po 50 [minuty]:

    A więc tak. Użyłem NMAP (pod win).

    I teraz:

    Kiedy z domowego komputera skanuję ten zewnętrzny (port 2015) to:
    INTERNET/UDP - Próba przesłania i odebrania pakietu UDP

    Kiedy z domowego komputera skanuję ten zewnętrzny (port 64050) to:
    INTERNET/UDP - Próba przesłania i odebrania pakietu UDP

    Kiedy z drugiego komputera skanuję ten domowy (port 2015) to:
    INTERNET/UDP - Próba przesłania i odebrania pakietu UDP

    Kiedy z drugiego komputera skanuję ten domowy (port 64050) to:
    INTERNET/UDP - Próba przesłania i odebrania pakietu UDP


    Zmieniłem dla testu port z 2015 na 64050 gdyż widzę że coś pracuje na tym porcie(a może się mylę)

    Docelowo w programie można zrobić tak że zdalny komputer zadaje pytanie na port np.64050 a mój moduł ethernetowy będzie odpowiadał na port 64051. Tu wolna ręka jeśli to w czymś pomoże. Generalnie jakie porty powinienem używać? Te poniżej 2000 z tego co wiem to często używa sam system. Skanowałem dostępne porty i jakieś 99,9% jest wolnych więc pewnie mogę wybierać do woli.

    Z tego co widzę po skanach z Nmap-a to jest połączenie ale tu proszę kolegów o wypowiedź gdyż ja jestem po prostu za cienki..

    Oczywiście za Waszą pomoc jestem w stanie nawet odpowiednio zapłacić. Po prostu mam już dość brodzenia po omacku i słuchania wypowiedzi że u mnie to działa to problem u Ciebie. Chcę wiedzieć jak to działa i dlaczego nie działa , krok po kroku. Zapewne nie tylko ja się męczę z tym zagadnieniem i przyda się to także innym forumowiczom. Dlatego za pomoc w rozwiązaniu problemu zapłacę.
    Przynajmniej teraz widzę że coś się w temacie dzieje i za to dziękuję.
  • Pomocny post
    Poziom 1  
  • Poziom 24  
    Widzę że nie tylko ja mam problemy z bezsennością :)

    Jeśli w swoim routerze w domu mam ustawione DMZ lub przekierowane porty to z zewnątrz mam pełen dostęp do swojego sterownika. Mogę przesyłać dowolne dane i sterować wszystkimi opcjami. Ale nie mogę wysłać żadnej odpowiedzi do zdalnego komputera na zewnątrz. I z tego co widzę to normalna sprawa i tak powinno być , tak?

    Co do VPN to troszkę nie rozumiem zasady działania tego i muszę o tym poczytać. Mam w domu dwa routery. Jeden FUNBOX z orange z którego aktualnie mam internet i drugi PHILIPS CKA5720 który używam jako switch do rozgałęzienia internetu ( i to pod niego mam podłączony sterownik ethernetowy) .
    Czy taki router może służyć do VPN ? Pytam , ale nie wiem do końca o co pytam.
    Co do shell lub proxy to jaki mniej więcej jest koszt takich usług (generalnie co i gdzie).

    Generalnie co będzie tańsze aby zrealizować to co potrzebuję. Żadnych dużych transferów danych nigdy będę przeprowadzał. Raz dziennie będzie jedno-dwa połączenia i wysłanie kilku krótkich stringów w obie strony.
    Co powinienem zrobić Waszym zdaniem.


    Tu dane techniczne mojego starego routera(ale pewnie się nie nada):

    Cytat:
    Protocol Support:
    RFC 1483/2684 (Bridged/Routed Ethernet over ATM)
    ITU-T I.610 F4/F5 OAM Send and Receive/Loop back
    Transparent Bridge Support
    PAP/CHAP/MS-CHAP for password authentication support
    DHCP Server/Relay/Client
    DNS Relay Agent
    DMZ Support
    PPP Always on with configurable timeout
    Connectivity:
    Four Ethernet ports 10/100Mbps Base-T
    One RJ-11 WAN port
    Wi-Fi 802.11 b/g
    Power Jack
    USB 2.0
    Management:
    Web-based Configuration Interface
    Firmware upgrade via web based management
    Power indicators
    Event and history logging
    G.711u/a, G.722, G.726, G.729AB, G.723-1
    Network Ping:
    Reset button to restore factory settings
    Security:
    Stateful Packet Inspection support
    Intrusion Detection and DoS (Denial of Service)
    NAT for basic firewall functionality
    Password Authentication to Cable
    MAC address filtering for enhanced security
    Access control on IP level
    Password protected configuration access
  • Poziom 1  
  • Poziom 24  
    A więc tak.

    Moje aktualne IP to : 83.25.250.214

    Spięte jest to tak:

    Do pierwszego portu FUNBOXA jest wpięty kabel i podłączony pierwszego portu PHILIPSA.
    W Philipsie mam wyłączone wszystko , i DHCP i Firewall i przez to straciłem do niego dostęp poprzez WWW. Działa on teraz tylko jako switch.


    tu zrzut z karty sieciowej:

    INTERNET/UDP - Próba przesłania i odebrania pakietu UDP


    W tej chwili przekierowałem DMZ na IP mojego sterownika ethernetowego.

    Nasłuchuje on na porcie 2015.

    I teraz przesyłając :

    <^LAN_HOME^RPT^KOMINEK^>

    powinien odesłać raport na IP i PORT nadawcy w postaci
    Cytat:
    <^001_@_^1^23.0^28^0^23.6^26^0^47^56^0^1^2^0^11^20^27^70^0^0^0^0^1^47^64^0^0^39^0^0^0^0^26^0^9^1^1^1^39^58^67^85^60^0^2^50^0^23^28^26^1^0^20^0^-5.3^0.0^0^6fc4^>




    edit: Widzę teraz na sterowniku że przyszło jakieś zapytanie na port 2015 i z IP xx.xx.xx.xx
    Więc sterownik odbiera coś.
  • Pomocny post
    Poziom 1  
  • Poziom 24  
    Już to robiłem. Nic nie dało. Widać właśnie że nic nie wychodzi na zewnątrz. Ale zrobię jeszcze raz. Dzwoniłem nawet do orange i kazali mi wpisać w miejsce loginu neostrady "BEZ_OCHRONY-login@neostrada.pl" .Podobno mają jakąs dodatkową ochronę którą to udziwnienie wyłącza. Ale i tak nic to nie daje.
  • Pomocny post
    Poziom 31  
    Zapytaj sie dzialu technicznego jakie porty zrodlowe i jakie docelowe blokuja bo jesli chodzi o nieskie porty to tego w cholere blokuja. Juz wiele razy musialem do nich dzwonic zeby mi chociaz VPN puszczalo w uslugach DSL.
    Jak juz wspominalem ja bym to ominal przez vpn
  • Poziom 24  
    Ale do tego potrzebuję zapewne nowy lepszy router. A może wystarczy zaporę w routerze ręcznie skonfigurować. Wyłączyć całkowicie się nie da bo są trzy poziomy (NISKI,NORMALNY,WYSOKI i UZYTKOWNIKA) , ale tu już potrzebna by była mi pomoc abym nie pozbawił się internetu.


    edit: Jeśli mam przekierowane w FUNBOX-ie DMZ na swój komputer(lub moduł ethernet) to używając TCP mogę się zdalnie łączyć i bez wiekszego problemu (czasem o dziwo nie wiem dlaczego nie łączy) wymieniać się danymi. Wydaje mi się że problem jest tylko w zaporze FUNBOXA. Ale jeśli VPN jest pewny i lepszy w moim problemie to proszę o pomoc.
  • Poziom 1  
  • Pomocny post
    Poziom 14  
    Sprawdził bym dokładnie wesję z blokowaniem wychodzącego ruchu UDP u dostawcy internetowego. Maja oni zwycza "dla dobra urzytkownika" naprawiania świata za wszelkącenę i blokują co im sie podoba. Co prawda nie szłyszałem aby Orange(TP) blokował ruch jakoś uciążliwie ale nigdy nie wiadomo dopóki nie ma jakiegoś problemu z działaniem jakiejś specyficznej aplikacji. U wielu mniejszych "lokalnych" dostawców takie blokowanie to norma a nawet miałem styczność z takim co monitorował ruch swoich klientów i dzwonił do nich z zaleceniem przeskanowania programem antywirusowym bo ich odetnie.

    Spróbój sprawdzić na jakim etapie ramki UDP wysyłane od sterownika gubia się.
    Mali dostawcy bez problemu przyjmą UDP za to blokuja wszelki ruch wychodzący.
  • Poziom 1  
  • Pomocny post
    Poziom 31  
    To ze pakiet na danym porcie to nie znaczy ze nie jest blokoway ruch taki wychodzacy. W przypadku TCP to odrazu widac bo albo wcale nie dziala albo dziala. W UDP jes tak jakbys puscil do sasiada alkoholika zeby mu flaszke przyniosl. Moze dojsc albo gdzies sie stracic po drodze ;)

    Uwierzcie ze orange i netia bardzo wiele portow blokuje tylko ze ponizej 0.1% userow to zauwazy.
    Ustaw w sterowniku jakis wysoki port najlepiej ponad 10000 i sprawdz
  • Poziom 1  
  • Poziom 24  
    No dobrze poddaję się z tym UDP. Pisałem , dzwoniłem , rozmawiałem z BOK i szczerze powiedziawszy wydaje mi się że wiem więcej niż oni. Zanim zacznie się rozmawiać z nimi o tym po co dzwonię to trzeba wysłuchiwać bzdur typu zrestartować router , program na pana komputerze jest wadliwy itd.... mam już dość i nie mam już siły. Złożyłem pisemną rezygnację dzisiaj w ORANGE z usług jesli w ciągu 30 dni nie zostanie usunięta usterka albo nie otrzymam pisemnego wyjaśnienia tej kwestii.

    Koniec.


    Od tego momentu przechodzę na TCP.
    Testowałem sobie komunikację pomiędzy dwoma PC programem TCP TEST TOOL i wszystko działa bezbłędnie(no prawie bo czasem nie mogę nawiązac połaczenia)
    Ale znów problem. O ile w VB.NET na PC nie mam problemu aby napisać sobie aplikację klient-serwer to na avr nie wiem od czego zacząć.
    Pozostanę już przy bibliotece z tuxgraphics , skoro działało mi na tym UDP to i TCP powinno pójść.
    Szukałem w sieci przykładów połączenia TCP za pomocą tych bibliotek ale wszędzie ładują obsługę przez przeglądarkę internetową a to mi nie potrzebne.
    Mój moduł ma łączyć się z każdym IP jakie będzie próbowało nawiązać połączenie.
    Kwestie bezpieczeństwa rozwiążę programowo (choćby za pomocą CRC32)-ale to potem.
    Przeglądałem wnikliwie przykłady z książki Pana Mirka K. i o ile UDP rozumiem to nie wiem jak zabrać się za zestawienie i nawiązanie połączenia pomiędzy dwoma komputerami oraz jak przesłać z jednego do drugiego jakiś tekst jak w przypadku UDP. Zasada powinna być zbliżona do UDP poza zestawieniem połączenia.
    Może ma Ktoś jakiś przykład albo wskaże co robić i od której strony zacząć.
    Program zaczynam pisać od zera. Na mojej płytce z ENC mam wyświetlacz i na nim muszę wyświetlać jaki komputer(zdalny) połączył się z modułem i na jakim porcie.
    Chcę ustawić sztywno port nasłuchowy modułu gdyż będę musiał ten port przekierować w routerze.

    Wiadomo że po uruchomieniu modułu będzie musiał:

    1.Zostać przypisany i uruchomiony port nasłuchowy
    2.W momencie nadejścia połączenia na ten port musi nastąpić połączenie
    3.W tym momencie muszę wyświetlić na lcd w module z jakim zdalnym IP jestem połączony i jakie dane przesłał
    4.Muszę mieć mozliwośc odesłania mu danych w postaci tekstowej.

    Absolutnie nie chcę opierać połączenia i przesyłania danych o żadną przeglądarkę internetową. Mi żadne grafiki itp. nie są potrzebne. Ja muszę mieć mozliwośc przesyłania krótkich ramek tekstowych coś , dokładnie jak w przypadku UDP.


    Proszę o jakieś sugestie.
    Nie chcę zakładać nowego wątku ale jeśli to konieczne to poprawię.