[Netcat script] Controllestructuur werkt niet

Pagina: 1
Acties:

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 28-11 09:29
Ik ben bezig met enkele scripts te maken. De bedoeling is dat er een netcat server runt die een script uitvoerd. Een client die verbinding maakt (moet een Java client worden) geeft iets door en krijgt wat terug.

Het script van de eigenlijke server:
code:
1
2
3
4
#!/bin/bash
while(true) do
    nc -l -p 1234 -e ncServerScript.sh
done

De server doorloopt dus een oneindige lus om te luisteren naar binnenkomende clients. Daarbij voert hij het script ncServerScript.sh uit.

In ncServerScript.sh staat hetvolgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
datum=`date +%d-%m-%y--%H:%M:%S`
read clientInput

echo "$datum Client stuurde: '$clientInput'" >> nclog.txt

if (test "$clientInput" = "halloserver") then
    echo "$datum Server gaat in test lus..." >> nclog.txt
    echo Hallo client
else
    echo Onbekende client
fi

Om te beginnen is er een variabele die de datum en tijd bevat (bvb 29-01-07--16:20:45). Vervolgens wordt de input van de verbonden client uitgelezen. Die client input wordt samen met datum en tijd naar een logje weggeschreven.

Nu moet de server dus "Hallo client" echo'en wanneer hij "halloserver" inleest van een client. Anders geeft hij "onbekende client" terug.

Het probleem is nu als volgt:
bij het verbinden via telnet wordt altijd het else gedeelte uitgevoerd, zelfs als ik "halloserver" meegeef bij telnet. Dit wordt gelogt, dus er is geen sprake van een typefout.

Start ik echter een 2de netcat sessie als volgt:
code:
1
echo "halloserver" | nc 127.0.0.1 1234


Dan wordt wel het if gedeelte van de controlle structuur uitgevoerd.

Om dat te bewijzen het logje:

code:
1
2
3
29-01-07--16:20:38 Client stuurde: 'halloserver'
29-01-07--16:20:45 Client stuurde: 'halloserver'
29-01-07--16:20:45 Server gaat in test lus...

De eerste keer werd er met telnet verbonden en werd het if statement niet uitgevoerd, de 2de keer verbind ik via netcat en wordt die wèl uitgevoerd.

Het is voor mij een raadsel in elk geval.. Iemand een idee?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:58
Probeer het eens met netcat in plaats van telnet; telnet stuurt allerlei configuratiedata mee (het is méér dan alleen een TCP-verbinding!) en die komt in je string te staan.

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 28-11 09:29
Via netcat werkt het, inderdaad.

Maar een groter probleem is dat het met java dus ook niet werkt, hier een stukje code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        Socket link = null;
        try {
            link = new Socket(host,PORT);
            BufferedReader in = new BufferedReader(new InputStreamReader(link.getInputStream()));
            PrintWriter out = new PrintWriter(link.getOutputStream(),true);
            String serverResponse;
            out.println("halloserver");
            serverResponse = in.readLine();
            System.out.println("Server reply: " + serverResponse);
            link.close();
            
        } catch (Exception e) {
            System.out.println("Exceptie opgetreden" + e.getMessage());
        }


De Java client krijg dus telkens de echo van het else gedeelte van het netcat script terug. Ook hier hetzelfde als bij telnet: de string die naar de nc server gestuurd wordt is juist, af te leiden uit het logje dat gegenereerd wordt door het netcat script.

Ik begrijp er niks van. :'(

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:58
Bekijk je logfile eens goed, dan. Grote kans dat Java netwerk newlines stuurt (\r\n) in plaats van de newlines die je script verwacht (\n). Dat kun je zien (net als het probleem met telnet) door je logfile met een hex editor te bekijken.

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Dat is 't inderdaad. Telnet stuurt namelijk helemaal die vreemde tekens niet mee. Althans, niet de client. Dat doet de serverkant van telnet.

Wat telnet wel doet is volledige \r\n's sturen ipv alleen \n.

[ Voor 18% gewijzigd door CyBeR op 29-01-2007 17:45 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 28-11 09:29
Hmmm, blijkbaar ligt het probleem inderdaad daarbij.

Ik heb dan maar de tactiek veranderd: ik zet het eingelijke commando tussen bepaalde karakters, bvb :
Vervolgens filter ik op wat er na de eerste : staat.

Er mag dan nog staan veelonzin:belangrijk:nogwatonzin, dan wordt het juiste er toch nog uitgefilterd. ;)

  • rapture
  • Registratie: Februari 2004
  • Nu online

rapture

Zelfs daar netwerken?

Ik zit met exact hetzelfde probleem en zal tactiek hierboven uitproberen.

[edit]Het werkt.

[ Voor 12% gewijzigd door rapture op 31-01-2007 03:37 ]

Pagina: 1