Sta Δημοσ. 19 Μαΐου 2001 Δημοσ. 19 Μαΐου 2001 Sth dieu8ynsh : <A HREF="http://www.skeptix.org" TARGET=_blank>http://www.skeptix.org</A> exei ena polu ediaferon pneumatiko pexnidi.Alla allos einai o skopos tou post.To pexnidi ayto fortwnei ena java applet apo oti katalaba kai afou fortw8ei to applet parathrhsa pws enw pezw den antallassontai dedomena me to server,para mono otan telika kerdisw h xasw.Anarwtiomoun an yparxei tropos na "koroidepsei" kaneis to applet stelnontas tou ena paketo pou leei oti kerdise.Ektos aytou einai dunato na ripparoume to applet?Na to katebasw diladi kata kapoio tropo.Sas eyxaristw gia to xrono sas.<p>[This message has been edited by gosta100 (edited 19-05-2001).]
Γηρυόνης Δημοσ. 22 Μαΐου 2001 Δημοσ. 22 Μαΐου 2001 gosta100, θα μπορούσες να κοροϊδέψεις το σερβερ και να του στείλεις ένα πακέτο με δεδομένα που να λέει ότι κέρδισες αλλά αυτό θα ήτανε πολύ περιορισμένο. Θα μπορούσες να χρησιμοποιήσεις ένα DataOutputStream out και να κάνεις κάτι σαν out.writeBytes("τα δεδομένα εδώ") αλλά αυτό δεν πιάνει πάντα. Μην ξεχάς ότι πολλές applets είναι signed με το σερβερ για να μπορούνε να στέλνουνε και να λαμβάνουνε πληροφορίες και υπάρχουνε πολλοί περιορισμοί. Φαντάσου να είχες εσύ ένα σέρβερ. Δε θα ήθελες ο καθένας να μπορεί να συνδέεται στο σέρβερ σου και να στέλνει πακέτα. Αν θα μπορούσες και μιλούσες στον administrator και σου επέτρεπε να το κάνεις τότε ναι, θα μπορούσε να γίνει, αλλιώς το βλέπω χλώμο.<BR> Όσον αφορά το θέμα του να κατεβάσεις την applet δυστυχώς αυτό δε γίνεται (τουλάχιστον όχι από όσο ξέρω).<P> Ελπίζω να βοήθησε.<BR><IMG SRC="http://www.insomnia.gr/cpubb/smilies/cwm16.gif" border=0>
Επισκέπτης Δημοσ. 23 Μαΐου 2001 Δημοσ. 23 Μαΐου 2001 Thn wra pou eisai syndedemenos me th selida kai exeis katevasei to applet kai trexei, afto vrisketai mesa sto temporary directory sou. Mporeis tote na to kaneis copy se kapoio allo dir... Apo kei kai pera to vlepw dyskolo na to kaneis na doulepsei ka8ws tis perissoteres fores gia na tre3ei ena applet tou pernas kapoies parametrous, pou dyskola 8a tis gnwrizeis...<P>Filika<BR>Dionisos
Γηρυόνης Δημοσ. 23 Μαΐου 2001 Δημοσ. 23 Μαΐου 2001 Διόνυσε έχεις δίκιο, από τη στιγμή που μία applet είναι client-side component είναι λογίκο να βρίσκεται κάπου προσωρινώς στον client (να και κάτι που δεν το είχα σκεφτεί πιο πριν). Τώρα το κακό είναι ότι κάπου θα βρίσκεται το .class αρχείο και όχι το .java. gost100 Αν θέλεις να δεις τον πηγαίο κώδικα τότε θα πρέπει να βρεις ένα πρόγραμμα που να μετατρέπει το bytecode σε source code. Αυτό γίνεται και με το jad (δε θυμάμαι διεύθυνση αλλά ψάξε στο Διαδίκτυο και κάτι θα βρεις. Αν αποτύχουνε όλα μπορώ να σου το στείλω εγώ αν θέλεις). Πρόσεξε όμως γιατί μερικές κλάσσέις είναι obfuscated δηλαδή ο πηγαίος κώδικας είναι επίτηδες μπερδεμένος ώστε να μην μπορεί να διαβαστεί. Και δυστυχώς από ότι ξέρω δεν υπάρχουν anti-obfuscated προγράμματα.<P>------------------<BR>"It can only be attributed to human error"<BR>2001 A Space Odyssey
Sta Δημοσ. 23 Μαΐου 2001 Μέλος Δημοσ. 23 Μαΐου 2001 Nai pragmati ston katalogo temporary internet files yparxei to .class arxeio,alla oxi bebaia kai o phgaios kwdikas.Gia thn akribeia yparxoun polla .class arxeia pou fortwnei to pexnidi.Prospa8hsa na ta kalesw offline apo to browser alla de doulepse,fainetai oti opws eipe o Dionusos kapoies parametrous tis pernaei o server otan eimai online.<BR>Twra oson afora to na "koroidepsw" to server,ayth h idea mou hrthe afou blepw oti afou fortw8ei to applet , den antalassw dedomena me to server para mono sto telos tou paixnidiou an kerdisw h xasw.Elega mhpws piasw to paketto pou stelnw otan kerdizw as poume,kai to stelnw egw meta sto idio omws Stream pou stelnei sto server to applet,den xerw an ayto einai effikto h pws.Sas eyxaristw pantws gia to ediaferon sas.
Γηρυόνης Δημοσ. 23 Μαΐου 2001 Δημοσ. 23 Μαΐου 2001 gosta100 αυτό που θέλεις να κάνεις είναι δύσκολο, ιδιαίτερα αν δεν έχεις access στον διακομιστή που θέλεις να συνδεθείς, και απαιτεί πολύ καλή γνώση της Java. Πρώτα πρώτα πρέπει να σκεφτείς πως θα το κάνεις. Δηλαδή θα χρησιμοποιήσεις μία άλλη applet η απλώς ένα απλό πρόγραμμα που θα στέλνει πακέτα στον διακομιστή. Πρέπει να σκεφτείς ότι οι applets έχουνε πάρα πολλούς περιορισμούςκαι μπορούνε να κάνουνε μόνο περιορισμένα πράγματα. Για να σου δώσω ένα καλύτερο παράδειγμα φαντάσου τι θα γινότανε αν κάποιος τρελλός έγραφε ένα applet που θα μπορούσε να σβήσει όλα τα αρχεία στον σκληρό (χρησιμοποιώντας τη File.delete() μέθοδο) και δεν υπήρχανε περιορισμοί. Καταστροφή. Επιπλέον η applet δεν μπορεί να επικοινωνήσει παρά με το διακομιστή στον οποίο διαμένει. Δηλαδή δεν μπορείς να γράψεις μία applet (που έρχεται από το δικό σου το διακομιστή) και ανοίγει μία σύνδεση σε έναν άλλο. Για παράδειγμα αν εσύ έχεις τον διακομιστή <A HREF="http://www.gost100.com'>http://www.gost100.com'>http://www.gost100.com" TARGET=_blank>http://www.gost100.com</A> και προσπαθήσεις να ανοίξεις μία σύνδεση στον <A HREF="http://www.girionis.com" TARGET=_blank>http://www.girionis.com</A> χρησιμοποιώντας μία applet που διαμένει στον διακομιστή σου (δηλαδή στο <A HREF="http://www.gost100.com)" TARGET=_blank>http://www.gost100.com)</A> γράφωνταs<P>Socket socket = new Socket("www.girionis.com", 8080);<P>τότε αυτό θα πετάξει εξαίρεση ασφάλειας διότι η applet σου δεν θα έρχεται από τον διακομιστή <A HREF="http://www.girionis.com." TARGET=_blank>www.girionis.com.</A> Όπως βλέπεις είναι σχεδόν αδύνατο να το κάνεις με κάποια άλλη applet.<P> Οπότε μένει η λύση του application ή Servlet που και αυτή έχει περιορισμούς γιατί συνύθως θα πρέπει πρώτα να έχεις τη συγκατάθεση του διακομιστή στον οποίο θέλεις να συνδεθείς. Είπαμε, φαντάσου να είχες εσύ ένα διακομιστή. Θα σου άρεσε να μπορούνε να συνδέοντε όλοι κα να στέλνουνε πακέτα; Όχι βέβαια.<BR> Κατ'αρχάς θα πρέπει να ξέρεις το όνομα του διακομιστή και τη δίοδο (port) που θέλεις να συνδεθείς (αν χρησιμοποιήσεις sockets) ή το URL (αν χρησιμοποιήσεις HTTP tunelling). Φαντάζομαι θα μπορείς να βρεις όλες τις σχετικές πληροφορίες αν καταφέρεις και μετατρέψεις το bytecode σε πηγαίο κώδικα. Προσωπικά θα σου πρότεινα να χρησιμοποιήσεις HTTP tunelling. Οι Sockets είναι πιο απλές αλλά συνήθως θα έχεις να περάσεις από firewalls, θέματα ασφάλειας, και, ενώ η χρησιμότητα των Sockets μπορεί να πέσει, χρησιμοποιώντας HTTP tunelling μπορείς να περάσεις σχετικά πιο εύκολα από firewalls, περνάς πάνω από Secure Socket Layer ασφάλεια, και γενικότερα ο κώδικάς σου θα είναι πιο μικρός (δηλαδή πιο λίγες γραμμές).<P> Για να αρχίσεις να γράφεις τον κώδικα το πρώτο πράγμα που θα πρέπει να κάνεις θα είναι να ανοίξεις μία σύνδεση με τη διεύθυνση του σερβερ. Αφού ήδη θα ξέρεις τι δεδομένα θα πρέπει να στέιλεις στο διακομιστή τότε θα πρέπει να τα κωδικοποιήσεις χρησιμοποιώντας τη URLEncoder.encode() μέθοδο. Μετά θα πρέπει να δημιουργήσεις μία νέα instance του URL που θέλεις να φορτώσεις περνώντας του ως παραμέτρους το προτόκολλο, διακομιστή και θύρα στην οποία συνδέεσαι (αν δεν ξέρεις ποια είναι θα μπορείς να τα βρεις αν χρησιμοποιήσεις τα getCodeBase().getProtocol(), getCodeBase().getHost() ...). Επίσης αν χρειαστέι να περάσεις μέσω κάποιου proxy sever θα πρέπει να βάλεις τα settings manually χρησιμοποιώντας System.getProperties().put("httpProxy", "IP address of the proxy here") κλπ.<BR> Αφού τα κάνεις όλα αυτά μπορείς να ανοίξεις τη σύνδεση χρησιμοποιώντας τη μέθοδο openConnection από τη URL κλάσση. Επίσης θα πρέπει να θέσεις και κάποια άλλα πράγματα όπως το να καθορίσεις τη μέθοδο με την οποία θα στείλεις τα δεδομένα (GET ή POST), να θέσεις το περιεχόμενο των δεδομένων κλπ. Τελευταίο βήμα θα είναι να πάρεις το OutputStream της σύνδεσης και να στείλεις τα δεδομένα στο διακομιστή (μην ξεχάσεις να το κλείσεις στο τέλος). Μετά από αυτό μπορεί να έχεις πετύχιε να στείλεις κάποια δεδομένα στο σερβερ ώστε να "πιστέψει" ότι κέρδισες.<P> Πάντως θέλω να ξέρεις ότι αυτά που περιέγραψα πιο πάνω μπορεί να μην είναι όλα σωστά. Δεν έχω κάνει ποτέ κάτι τέτοιο αλλά εκανα κάτι παρόμοιο και χρησιμοποίησα την ίδια δομή. Επιπλέον ο κώδικας που σου έγραψα βγήκε από το μυαλό μου και από ό,τι θυμάμαι, οπότε μπορεί να μην είναι τελείως σωστό. Για περισσότερες λεπτομέρειες κοίτα το Java API.<P> Βλέπεις ότι δεν είναι και το πιο εύκολο πράγμα να κάνεις (δεν ξέρω αν είσαι δυνατός στον προγραμματισμό) αλλά με λίγη τύχη και βοήθεια παραπάνω πιστεύω να τα καταφέρεις.<P>------------------<BR>"It can only be attributed to human error"<BR>2001 A Space Odyssey<P>[This message has been edited by girionis (edited 23-05-2001).]<p>[This message has been edited by girionis (edited 23-05-2001).]
Sta Δημοσ. 24 Μαΐου 2001 Μέλος Δημοσ. 24 Μαΐου 2001 Se eyxaristw file girioni,xerw socket programming alla den eida fws mesw aytou.8a dokimasw se java,pou den einai kai to forte mou.
Γηρυόνης Δημοσ. 24 Μαΐου 2001 Δημοσ. 24 Μαΐου 2001 gosta το θέμα δεν είναι να ξέρεις socket programming αλλά το να σου επιτρέψει ο σερβερ να συνδεθείς εκεί και να του στείλεις πακέτα. Βασικά πιστεύω ότι από τη στιγμή που η applet έχει ανοίξει μία σύνδεση με τον διακομιστή να μπορείς να κάνεις και εσύ το ίδιο, αλλά και πάλι πιστεύω να υπάρχουνε περιορισμοί. Αυτό που θα σου πρότεινα εγώ να κάνεις είναι να μετατρέψεις το bytecode σε πηγαίο κώδικα και να δεις εκέι μέσα το όνομα του διακομιστή και το port που χρησιμοποιεί για να συνδεθεί. Αλλά και πάλι πρέπει να ξέρεις τι δεδομένα θα στείλεις στο διακομιστή (που και πάλι πιστεύω να μπορείς να το βρείς από τον πηγαίο κώδικα της applet). Δεν μπορώ να σκεφτώ κάτι άλλο αυτή τη στιγμή. Ελπίζω να βοηθήσει.<P>------------------<BR>"It can only be attributed to human error"<BR>2001 A Space Odyssey<p>[This message has been edited by girionis (edited 23-05-2001).]
Sta Δημοσ. 24 Μαΐου 2001 Μέλος Δημοσ. 24 Μαΐου 2001 Nai swsta les ,egw ekana to exhs aploiko,me ena packet sniffer eida se poia port tou server pane ta paketta pou tou stelnw kai apo poia port fevgoun ap'edw.Logika an anoixw roh me ayta ta stoixeia de 8a mou thn epitrepsei?
Γηρυόνης Δημοσ. 24 Μαΐου 2001 Δημοσ. 24 Μαΐου 2001 Λογικά ναι. Δοκίμασε να στείλεις δεδομένα και πάρε την απάντηση που στέλνει πίσω ο σέρβερ. Αν όλα είναι καλά τότε ψάξε να βρείς τι δεδομένα χρειάζεται να στείλεις ώστε να του "πεις" ότι κέρδισες.<P>------------------<BR>"It can only be attributed to human error"<BR>2001 A Space Odyssey
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.