Forum » Programiranje » linux c - ne sprejme UDP paketa
linux c - ne sprejme UDP paketa

slovencl ::
Pozdravljeni,
Naredil sem si en testni program za posiljanje in sprejemanje UDP paketov. Paket posljem in ga tudi dobim nazaj, vendar pa ga moj program ne sprejme, kljub temu da imam bind().
Ima kdo kaksno idejo, v cem bi bil problem?
c koda
lsof + wireshark
Naredil sem si en testni program za posiljanje in sprejemanje UDP paketov. Paket posljem in ga tudi dobim nazaj, vendar pa ga moj program ne sprejme, kljub temu da imam bind().
Ima kdo kaksno idejo, v cem bi bil problem?
c koda
lsof + wireshark
- spremenil: slovencl ()

srus ::
Preberi man za recvfrom in predelaj kodo okoli recvfrom. Vsekakor si poglej vrednosti, ki jih vrača ta funkcija in errno, ki jih nastavlja.

misek ::
Uporabi ločena socket-a za server in klienta?
Poleg tega dejansko nekaj pošlji - sedaj pošlješ podatke dolžine 0?
Poleg tega dejansko nekaj pošlji - sedaj pošlješ podatke dolžine 0?
Zgodovina sprememb…
- spremenil: misek ()

Ahim ::
A naj to dejansko deluje da posljes paket iz 192.168.3.1 na 192.168.3.10, pricakujes pa da ga bos prejel in prebral iz socketa, bindanega na 192.168.3.1 (sicer imas nek komentar v smislu da dodas se en IP naslov na nek network interface, ampak ne poznamo tvoje mrezne konfiguracije)?
Par nasvetov:
1: Opisi mrezno konfiguracijo.
2: Opisi kaj bi rad dosegel.
3: Izberi manj konfuzne naslove (npr. .2 in .3 je bolje kot .1 in .10).
4: Loci client in server, ker je ocitno da ne gre za eno apliakcijo, ki se obojesmerno pogovarja z neko drugo, ampak gre dobesedno za dve loceni aplikaciji.
Par nasvetov:
1: Opisi mrezno konfiguracijo.
2: Opisi kaj bi rad dosegel.
3: Izberi manj konfuzne naslove (npr. .2 in .3 je bolje kot .1 in .10).
4: Loci client in server, ker je ocitno da ne gre za eno apliakcijo, ki se obojesmerno pogovarja z neko drugo, ampak gre dobesedno za dve loceni aplikaciji.

GupeM ::
Onemogoči RP filter.
Poleg točke 4 prejšnjega posta. Tudi ostale 3 točke bi bilo fino, da jih upoštevaš.
Poleg točke 4 prejšnjega posta. Tudi ostale 3 točke bi bilo fino, da jih upoštevaš.
Zgodovina sprememb…
- spremenil: GupeM ()

slovencl ::
Hvala vsem za odgovore. Sem sedaj modificiral zadevo.
Gre za komunikacijo računalnika (ip = 192.168.3.1) z data logerjem (ip = 192.168.3.10). Računalnik pošlje prazen UDP paket s porta 7789 na data logger port 7789. S tem sproži odgovor data logerja, ki pošlje podatke. Bind pri pošiljanju imam zato, da določim na katerem portu računalnik pošilja.
Obolevam... Program mi še vedno ne sprejema odgovora, ki ga dobim na isti port 7789 (paket vidim z wireshark). Ne dobim errorja na sprejemu, ker program čaka na paket, ki ga ne dobi.
Upam da je sedaj bolj razumljivo. Se komu sanja v čem je problem?
c koda
Gre za komunikacijo računalnika (ip = 192.168.3.1) z data logerjem (ip = 192.168.3.10). Računalnik pošlje prazen UDP paket s porta 7789 na data logger port 7789. S tem sproži odgovor data logerja, ki pošlje podatke. Bind pri pošiljanju imam zato, da določim na katerem portu računalnik pošilja.
Obolevam... Program mi še vedno ne sprejema odgovora, ki ga dobim na isti port 7789 (paket vidim z wireshark). Ne dobim errorja na sprejemu, ker program čaka na paket, ki ga ne dobi.
Upam da je sedaj bolj razumljivo. Se komu sanja v čem je problem?
c koda
Zgodovina sprememb…
- spremenil: slovencl ()

misek ::
Če hočeš uporabljati samo en port potem moraš imeti tudi samo en socket, ki je bindan na ta port. Tako da je tvoja originalna koda ok. In celo deluje - pravkar pognal.
Tako da preveri ali ti morda kakšen firewall blokira UDP pakete.
Tako da preveri ali ti morda kakšen firewall blokira UDP pakete.

slovencl ::
Hvala za info. Kako pa si testiral. A si naredil še en programček na drugi kišti, da odgovori - a lahko šeraš?
Firewall sem preverjal z $netstat -s -u pred in po zagonu tega programa, pa mi glede na izpis ni izločil nobenega novega UDP paketa. A je še kakšna druga opcija, da preverim, kje je obtičal ta konkreten paket?
----- pred zagonom programa -----
$ netstat -s -u
IcmpMsg:
InType0: 9
InType3: 13384
OutType3: 14232
OutType8: 18
Udp:
2923372 packets received
1272 packets to unknown port received
24 packet receive errors
1427682 packets sent
24 receive buffer errors
0 send buffer errors
IgnoredMulti: 3318
UdpLite:
IpExt:
InMcastPkts: 1950
OutMcastPkts: 1782
InBcastPkts: 3318
OutBcastPkts: 3
InOctets: 19626889448
OutOctets: 531556241
InMcastOctets: 239565
OutMcastOctets: 212840
InBcastOctets: 676702
OutBcastOctets: 234
InNoECTPkts: 14067093
InECT1Pkts: 760
InECT0Pkts: 100
MPTcpExt:
----- po zagonom programa -----
$ netstat -s -u
IcmpMsg:
InType0: 9
InType3: 13384
OutType3: 14232
OutType8: 18
Udp:
2923378 packets received
1272 packets to unknown port received
24 packet receive errors
1427701 packets sent
24 receive buffer errors
0 send buffer errors
IgnoredMulti: 3318
UdpLite:
IpExt:
InMcastPkts: 1950
OutMcastPkts: 1782
InBcastPkts: 3318
OutBcastPkts: 3
InOctets: 19626889874
OutOctets: 531557615
InMcastOctets: 239565
OutMcastOctets: 212840
InBcastOctets: 676702
OutBcastOctets: 234
InNoECTPkts: 14067099
InECT1Pkts: 760
InECT0Pkts: 100
MPTcpExt:
Firewall sem preverjal z $netstat -s -u pred in po zagonu tega programa, pa mi glede na izpis ni izločil nobenega novega UDP paketa. A je še kakšna druga opcija, da preverim, kje je obtičal ta konkreten paket?
----- pred zagonom programa -----
$ netstat -s -u
IcmpMsg:
InType0: 9
InType3: 13384
OutType3: 14232
OutType8: 18
Udp:
2923372 packets received
1272 packets to unknown port received
24 packet receive errors
1427682 packets sent
24 receive buffer errors
0 send buffer errors
IgnoredMulti: 3318
UdpLite:
IpExt:
InMcastPkts: 1950
OutMcastPkts: 1782
InBcastPkts: 3318
OutBcastPkts: 3
InOctets: 19626889448
OutOctets: 531556241
InMcastOctets: 239565
OutMcastOctets: 212840
InBcastOctets: 676702
OutBcastOctets: 234
InNoECTPkts: 14067093
InECT1Pkts: 760
InECT0Pkts: 100
MPTcpExt:
----- po zagonom programa -----
$ netstat -s -u
IcmpMsg:
InType0: 9
InType3: 13384
OutType3: 14232
OutType8: 18
Udp:
2923378 packets received
1272 packets to unknown port received
24 packet receive errors
1427701 packets sent
24 receive buffer errors
0 send buffer errors
IgnoredMulti: 3318
UdpLite:
IpExt:
InMcastPkts: 1950
OutMcastPkts: 1782
InBcastPkts: 3318
OutBcastPkts: 3
InOctets: 19626889874
OutOctets: 531557615
InMcastOctets: 239565
OutMcastOctets: 212840
InBcastOctets: 676702
OutBcastOctets: 234
InNoECTPkts: 14067099
InECT1Pkts: 760
InECT0Pkts: 100
MPTcpExt:
Zgodovina sprememb…
- spremenil: slovencl ()

slovencl ::
še eno stvar sem opazil: paket, ki ga dobim nazaj ima TTL (Time To Live) nastavljen na 1. Ampak v tem primeru gre za izmenjavo podatkov preko enega switcha, tako da to najbrž ni problem ali pač?
Sem si naložil pa tudi dropwatch programček. In mi ne pokaže, da bi sistem karkoli vrgel stran.
Nimam več idej
Sem si naložil pa tudi dropwatch programček. In mi ne pokaže, da bi sistem karkoli vrgel stran.
Nimam več idej


misek ::
Za drugo stran sem uporabil program netcat: https://www.geeksforgeeks.org/introduct...
Za pregled fw pa uporabi komando
Za pregled fw pa uporabi komando
sudo iptables -L -nki ti prikaže pravila. In boš hitro videl ali imaš kaj nastavljeno ali ne.

Ahim ::

misek ::

slovencl ::
Sem poskusil enako kot si ti (poslat UDP paket na ta port z drugega računalnika) in zadeva tudi meni deluje.
BTW, na firewallu nimam nobenih pravil (sudo iptables -L -n ne pokaže nič). Ta moj program pošlje paket ven in če prav razumem, se na istem portu omogoči tudi povezava nazaj. Sem pa tudi dodatno odprl UDP port 7789, ki ga uporablja ta program, ampak ni razlike.
Očitno je problem v tem paketu. Sumim da zato, ker ima paket TTL nastavljen na 1 in ga zavrže - čeprav kot berem ga ne bi smel. Ni mi jasno, zakaj nikjer ne vidim zavrženega paketa. Lahko še z metodo uzaludnih pokušaja poskusim še na računalniku generirat UDP paket s TTL=1 da vidim če je to res.
Wireshark ta problematičen paket vidi. A wireshark skenira pakete še predenj pridejo do firewalla oz. jih sistem zavrže?
BTW, na firewallu nimam nobenih pravil (sudo iptables -L -n ne pokaže nič). Ta moj program pošlje paket ven in če prav razumem, se na istem portu omogoči tudi povezava nazaj. Sem pa tudi dodatno odprl UDP port 7789, ki ga uporablja ta program, ampak ni razlike.
Očitno je problem v tem paketu. Sumim da zato, ker ima paket TTL nastavljen na 1 in ga zavrže - čeprav kot berem ga ne bi smel. Ni mi jasno, zakaj nikjer ne vidim zavrženega paketa. Lahko še z metodo uzaludnih pokušaja poskusim še na računalniku generirat UDP paket s TTL=1 da vidim če je to res.
Wireshark ta problematičen paket vidi. A wireshark skenira pakete še predenj pridejo do firewalla oz. jih sistem zavrže?
Zgodovina sprememb…
- spremenil: slovencl ()

RobertDev ::
probaj close(tx_socket); premaknit višje preden ustvarjaš rx socket na istem portu!
sicer pa ustvariš en socket
bind potem sendto pošlješ podatke in recvfrom pa bo delal
https://stackoverflow.com/questions/356...
sicer pa ustvariš en socket
bind potem sendto pošlješ podatke in recvfrom pa bo delal
https://stackoverflow.com/questions/356...
Zgodovina sprememb…
- spremenil: RobertDev ()

GupeM ::
Wireshark ta problematičen paket vidi. A wireshark skenira pakete še predenj pridejo do firewalla oz. jih sistem zavrže?
Da. Wireshark bere vse, kar pride do mrežne kartice (zato ga tudi moraš poganjati s pravimi privilegiji). Firewall ali kakšni drugi filtri paket zavržejo kasneje.

misek ::
Poskusi namesto svojega programa najprej uporabiti netcat, kjer moraš nazaj dobiti enak odgovor, kot bi ga sicer v svojem programu.
echo send_me_reply | nc -vvu 192.168.3.10 7789

slovencl ::
@RobertDev: sem poskusil, ni razlike
@Misek: Tudi izhodni port mora biti 7789. Sem poskusil z echo send_me_reply | nc -vu 192.168.3.10 7789 -p 7789.
Pošlje sicer samo en bayt (0x58), sicer nima veze, ker ravno tako sproži odgovor, ki pa ga zopet ne pokaže (nc ne izpiše ničesar).
Spodaj sken od wiresharka.
wireshark tx
wireshark rx
@Misek: Tudi izhodni port mora biti 7789. Sem poskusil z echo send_me_reply | nc -vu 192.168.3.10 7789 -p 7789.
Pošlje sicer samo en bayt (0x58), sicer nima veze, ker ravno tako sproži odgovor, ki pa ga zopet ne pokaže (nc ne izpiše ničesar).
Spodaj sken od wiresharka.
wireshark tx
wireshark rx
Zgodovina sprememb…
- spremenil: slovencl ()

slovencl ::
Problematičen paket ima vse OK.
wireshark tx + checksum ni ok, ampak to ni bistveno
wireshark rx + checksum vse OK.
wireshark tx + checksum ni ok, ampak to ni bistveno
wireshark rx + checksum vse OK.

misek ::
Zakaj se ti MAC naslovi ne ujemajo? Odgovor ti nazaj namreč prileti na drugi MAC, kjer je verjetno drugi IP naslov in tvoj program paketa dejansko ne sprejme.

slovencl ::
Jaoooo
...vse jasn, ko sem delal firmware za tale data logger sem poenostavil in sem dal kar fiksen mac v kodo (od tistega računalnika, s katerim sem delal). Zdaj pa sem uporabil drug računalnik, pa ni nič več delalo, na to poenostavitev pa sem čisto pozabil...
Zdej sem spoofal mac na tej kišti in vse dela :)
Hvala za pomoč, ne vem kdaj bi sam tole opazil :)

Zdej sem spoofal mac na tej kišti in vse dela :)
Hvala za pomoč, ne vem kdaj bi sam tole opazil :)

misek ::
Problem solved then :)
Ko nič ne dela moraš preveriti vsako malenkost, tudi takšno, ki sploh nima veze s problemom.
Ko nič ne dela moraš preveriti vsako malenkost, tudi takšno, ki sploh nima veze s problemom.

FireSnake ::
Hardkodane spremenljivke so vedno recept za težave.
Lepo, da se je razrešilo.
Lepo, da se je razrešilo.
Poglej in se nasmej: vicmaher.si
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Vzpostavitev strežnika (ubuntu)Oddelek: Omrežja in internet | 7154 (6355) | s6c-gEL |
» | iptables restartOddelek: Omrežja in internet | 1850 (1673) | BRBR |
» | obtožba DoS napada!? (strani: 1 2 )Oddelek: Informacijska varnost | 9042 (5833) | treker |
» | bandwidth controllOddelek: Omrežja in internet | 1579 (1344) | urarrr |
» | Samba portiOddelek: Omrežja in internet | 1749 (1445) | hruske |