tcp/ip ohjelmoinnista linuxille

olis yks ongelma että en saa määriteltyä sitä porttia millään mitä haluasin käyttää esim. koitan saada porttia 5550 käyttöön ja kone antaa mulla 2304 portin käyttöö

struct hostent *sen;
struct sockaddr_in server_d;
//koodiä välissä
::cn = socket(PF_INET, SOCK_STREAM, 0)
//koodia välissä
server_d.sin_family = AF_INET; //valitaan protokola
server_d.sin_port = htons(port);//tällä portin valintaei onnistu
server_d.sin_addr.s_addr = inet_addr(sen->h_addr);
connect(::cn,(struct sockaddr *)&server_d, sizeof(struct sockaddr));
//koodia lisää...
tässä on koko servulle yhdyshomma lyhennettynä eli siitä on jätetty kaikki ylimääränen pois tarkistukset ja muut

mutta miksi en saa käyttöön haluamaani porttia vaikka se ei ole käytössä kieli on C
17558
Äänestä

Muut lukivat myös

Vastaukset 17

Vanhimmat

linkun palomuurista tuo?

Äänestä
  • pitää kattoa noi asetukset läpi, mutta toimii hyvin kuitenki toi x-chat

    Äänestä

Tässä on siis kyseessä client, joka ottaa yhteyttä serveriin? Yleensä client-pään (active-open) socketteja ei sidota tiettyyn porttiin vaan annetaan kernelin valita se. Jos kuitenkin ennen tota connect(2) teet bind(2) niin pystyt sitomaan myös ton client-socketin, samalla tapaa kuten serverissä tehdään.

Äänestä
  • juu kyseessä on clien joka ottaa yhteyden serveriin ja voisin kokeilla tota bindiä sanon sitten että toimiiko...

    Äänestä

  • jea kirjoitti:

    juu kyseessä on clien joka ottaa yhteyden serveriin ja voisin kokeilla tota bindiä sanon sitten että toimiiko...

    Oliko sulla muuten joku painava syy bindata toi client-socketti johonkin tiettyyn porttiin? Yleensä tuota ei juurikaan tehdä.

    Äänestä

  • *BSD kirjoitti:

    Oliko sulla muuten joku painava syy bindata toi client-socketti johonkin tiettyyn porttiin? Yleensä tuota ei juurikaan tehdä.

    koska olen vässämässä pieni muotoista irc bottia yhella cannulle eikä irc toimi kun 6665-6669 olevilla porteilla siinä on syy. että tällein

    Äänestä

  • ei jostain syystä toi htons() toimi vaikka sille antaa sen portin ja sen jälkee jos vaikka tulostaa sen nii sitten se näyttää jotain ihan muuta eli siis se vaihtaa sen jo toisee enenkun pääsen tuonne bidiin saakka eli että en tiiä nyt että mikä siinä olis vikana ja ainakun koitan vaihtaa porttia niin aina tulee jokin toinen. ja joka kerralla olen huomannut että se tulostaa aina samat portit samoija portteja valitessa. vai onko multa menny jotain todella pahasti ohi tuon htons() funktion kanssa
    että muuten tuo saattaisi toimiakkin

    Äänestä

  • jea kirjoitti:

    koska olen vässämässä pieni muotoista irc bottia yhella cannulle eikä irc toimi kun 6665-6669 olevilla porteilla siinä on syy. että tällein

    Niin siis IRC *palvelimen* tunnetut portit on noi 6665-6669. Ei sitä kiinnosta, missä portissa se asiakassovellus elää. Käsittääkseni IRC botti taas on eräänlainen IRC-clientti => ei tarvitse bindata clientin porttia.

    Äänestä

  • jea kirjoitti:

    ei jostain syystä toi htons() toimi vaikka sille antaa sen portin ja sen jälkee jos vaikka tulostaa sen nii sitten se näyttää jotain ihan muuta eli siis se vaihtaa sen jo toisee enenkun pääsen tuonne bidiin saakka eli että en tiiä nyt että mikä siinä olis vikana ja ainakun koitan vaihtaa porttia niin aina tulee jokin toinen. ja joka kerralla olen huomannut että se tulostaa aina samat portit samoija portteja valitessa. vai onko multa menny jotain todella pahasti ohi tuon htons() funktion kanssa
    että muuten tuo saattaisi toimiakkin

    Niin mitäköhän yrität tulostaa? htons() -> Host To Network Short eli mappaa host-muodossa olevan portin yms. network orderiin (big-endian). Puhdas konversio on siis kyseessä.

    Äänestä

  • *BSD kirjoitti:

    Niin mitäköhän yrität tulostaa? htons() -> Host To Network Short eli mappaa host-muodossa olevan portin yms. network orderiin (big-endian). Puhdas konversio on siis kyseessä.

    Piti oikein kokeilla, miten hankala on saada tcp-yhteys IRC-serverille. Tässä napataan connecti irc.yhteys.mtv3.fi:6667 (ilman virheentarkistuksia).

    Tossa luetaan max 80-merkkiä, jotka serveri palauttaa.

    ------------------------------------

    int fd = socket(PF_INET, SOCK_STREAM, 0);

    sockaddr_in server_addr;
    bzero(&server_addr, sizeof(sockaddr_in));
    server_addr.sin_family = PF_INET;
    server_addr.sin_port = htons(6667);
    server_addr.sin_addr.s_addr = inet_addr("83.100.127.254");

    connect(fd, reinterpret_cast(&server_addr), sizeof(sockaddr));

    char buf[80];
    int bytes = recv(fd, static_cast(&buf[0]), 80, 0);

    ------------------------------------

    Äänestä

  • *BSD kirjoitti:

    Piti oikein kokeilla, miten hankala on saada tcp-yhteys IRC-serverille. Tässä napataan connecti irc.yhteys.mtv3.fi:6667 (ilman virheentarkistuksia).

    Tossa luetaan max 80-merkkiä, jotka serveri palauttaa.

    ------------------------------------

    int fd = socket(PF_INET, SOCK_STREAM, 0);

    sockaddr_in server_addr;
    bzero(&server_addr, sizeof(sockaddr_in));
    server_addr.sin_family = PF_INET;
    server_addr.sin_port = htons(6667);
    server_addr.sin_addr.s_addr = inet_addr("83.100.127.254");

    connect(fd, reinterpret_cast(&server_addr), sizeof(sockaddr));

    char buf[80];
    int bytes = recv(fd, static_cast(&buf[0]), 80, 0);

    ------------------------------------

    sain ton htonssin aamulla toimimaan tosin kysessä oli ihan ajattelemattomuutta tehty tarkistus joka ei toiminut aivan niinkun olin sen kuvitellut, mutta nyt se toimii ja koitin aamulla postata, mutta viesti ei jostain syystä suostunut lähtemään... no mutta kiiti kuitenkin kun jaksoitten vastata

    Äänestä

Beej's Network Programming Guide, simppeli ja helppotajuinen tutoriaali asian ytimeen.

Äänestä
  • nii että totakai oon noita tutoriaaleja lukenut, mutta toi portti juttu nyt ei vaan jostain syystä ei suostunut toimimaan...

    Äänestä

  • jea kirjoitti:

    nii että totakai oon noita tutoriaaleja lukenut, mutta toi portti juttu nyt ei vaan jostain syystä ei suostunut toimimaan...

    En tiedä vaikuttaako, mutta ainakin tuossa Beej's esimerkissä, jossa portti bindataan, on structin loppuosa ip-osoitteen jälkeen päddätty nollalla. Käy katsomassa, tuota esimerkkiä, jos ei sitten toimi, niin vikaa voipi olla vaikea keksiä.

    Äänestä

  • jma kirjoitti:

    En tiedä vaikuttaako, mutta ainakin tuossa Beej's esimerkissä, jossa portti bindataan, on structin loppuosa ip-osoitteen jälkeen päddätty nollalla. Käy katsomassa, tuota esimerkkiä, jos ei sitten toimi, niin vikaa voipi olla vaikea keksiä.

    sen minkä löysin niin ei siinä clientissä ollu ainakaan mitään bindaus hommaa. ja ton nollauksen oon nyt lisännyt siihen... tulos on edelleenkin sama ... taitaa olla vika jossain muussa tai voi olla, mutta toi on suunnilleen koko connectaamis homma. tossa mitä tohon oon pastennu nii on vain ilman virheisiin reagointia ja parin tekstin pätkän tulostusta

    Äänestä

Portilta ei ole pääsyä. Portti on siis suljettu. Laiton ratkaisu olisi rakenta jonkinlainen ylivuoto ja houkutella socketti avaamaan pääsyn tuolla porttialueella. Ei taida olla ihan helppo juttu.

Äänestä
  • Mitäköhän toi nyt tarkoittaa? Kaveri tuossa yrittää siis oman sovelluksensa (client) sockettia bindata määriteltyyn tcp-porttiin. Ei tolla ole mitään tekemistä suljettujen yms. filteröityjen porttien kanssa.

    Äänestä

Kommentoi aloitusta


jea kirjoitti:

olis yks ongelma että en saa määriteltyä sitä porttia millään mitä haluasin käyttää esim. koitan saada porttia 5550 käyttöön ja kone antaa mulla 2304 portin käyttöö

struct hostent *sen;
struct sockaddr_in server_d;
//koodiä välissä
::cn = socket(PF_INET, SOCK_STREAM, 0)
//koodia välissä
server_d.sin_family = AF_INET; //valitaan protokola
server_d.sin_port = htons(port);//tällä portin valintaei onnistu
server_d.sin_addr.s_addr = inet_addr(sen->h_addr);
connect(::cn,(struct sockaddr *)&server_d, sizeof(struct sockaddr));
//koodia lisää...
tässä on koko servulle yhdyshomma lyhennettynä eli siitä on jätetty kaikki ylimääränen pois tarkistukset ja muut

mutta miksi en saa käyttöön haluamaani porttia vaikka se ei ole käytössä kieli on C

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu