Hallo,
ich müsste einen RPC Client in C bauen, der eine Anfrage an einen RPC Java Server sendet und als Antwort einen long bekommt. Die Methode heißt getTime.
In Java ist das ganze mit einem ObjectOutputStream (os) realisiert
long returnWert = 0;
ObjectOutputStream os = new ObjectOutputStream(connect.getOutputstream());
if (methodenName.equals("getTime")) {
returnWert = list.getTime(); // Funktionsaufruf
}
os.writeObject(returnWert);
Wie kann ich das realisieren bzw. welche Programme benötige ich? Ich habe standardmäßog den gcc drauf.
Danke
Nils
Hallo,
Ich habe einen Teil-Code welcher sich bei Authentifizierung eine Shell reverse macht. Sprich. Benutzer kommt auf Server. Gibt über HTTP sein username+passwort ein. Wenn alles ok, wird das C Script gestartet, welches sich dann zu dem User auf Port 9000 verbindet. Wenn er jetzt da den Client laufen hat (kann auch netcat sein) so kann er mit Userprivelegien mit dem Server Konsolenbefehle austauschen.
Das Problem. STDIN, STDOUT, STDERR würde ich gerne auf den Socket legen, dass wenn der user z.b. cat /etc/nofileabcd eingibt auch einen Fehler bekommt wie "File not found".
Code mäßig schaut das folgendermaßen aus:
void set_ioe (int sock)
{
dup2 (sock, 0);
dup2 (sock, 1);
dup2 (sock, 2);
}
int client_sock (char* ip, int port, unsigned int timew)
{
int s;
struct sockaddr_in srv;
s = socket(AF_INET, SOCK_STREAM, 0);
if (s == -1)
{
perror("socket failed()");
// return 2;
}
srv.sin_addr.s_addr = inet_addr(ip);
srv.sin_port = htons( (unsigned short int) port);
srv.sin_family = AF_INET;
while (1)
{
sleep (timew);
if (connect(s, (struct sockaddr*) &srv, sizeof(srv)) == -1)
{
perror("Connection error occured");
// return 3;
}
else
{
set_ioe (s);
return s;
}
}
}
s wird dann returned auf die Main Funktion und die wartet in einer while (1) schleife auf benutzereingaben und pipt dann die benutzer angaben und sendet das result davon an den benutzer. ich denke das ist uninteressant, da das dup ja eigentlich schon beim erstellen des sockets gesetzt werden sollte oder?
Problem:
Wenn ich das so mache, wie oben und der user gibt cat /etc/iwasasdf ein, dann hängt sich die shell komplett auf.
Danke für eure Hilfe
Dieser Thread wurde von Moderator/in Nobuo T aus dem Forum ANSI C in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
Vielleicht wird dbus gesucht? Dbus ist der OpenSource Pendant zu dcom und wird von fast allen Desktop Enviroments verwendet.
http://freedesktop.org/wiki/Software/dbus
Gruss Christian
Wenn ich wüsste, warum es wieder geht, oder eine Vermutung hätte,
dann hätt ich es berichtet.
Ich hab einfach das Projekt neu angelegt, und meine Quellcode-Dateien
eingefügt.
u_ser-l schrieb:
wenn es nur 9 Kombinationen gibt, die nicht erlaubt sind, kannst du die doch im Vorfeld ausschließen:
test "{OPT\_F}" && test "{OPT_H}" && echo "is nich"
.
.
.
test "{OPT\_Z}" && test "{OPT_Y}" && echo "pech"
und dann die erlaubten Kombinationen verarbeiten.
Oder noch kürzer:
[ -n "$OPT_F" && -n "$OPT_H" ] && { echo "falsch!"; exit 1 }
[ -n "$OPT_Z" && -n "$OPT_Y" ] && { echo "auch falsch!"; exit 1 }
Oder auch:
if [ "$OPT_F" -a "$OPT_H" \
-o "$OPT_Z" -a "$OPT_Y" ]
then
echo "falsch!"
exit 1
fi
Statt "if [...] then" geht natürlich auch wieder "[..] && { ... }". Ich finde es aber mit if lesbarer. Du kannst auch Klammern verwenden, um komplexere logische Ausdrücke zu erstellen, aber auch das trägt nicht unbedingt zur Übersichtlichkeit bei.
hi,
du hast ja nicht mal ein socket mit socket() erstellt also kannst du auch keine verbindung herstellen. die variable sp->sd sollte den file-descriptor von einem socket enthalten sonst funktioniert der aufruf von connect() nicht.
p.s: konstanten werden normal nur mit großbuchstaben geschrieben. nenn dein struct doch Socket.
blan
achja, wenn du Java entwickeln willst solltest du dir am besten gleich das SDK anstatt nur der JRE ziehen.
@peel: wenn du auf deinem system keinen compiler hast nutzt dir eclipse dann auch nüscht viel ...
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
Hi,
das einzige, das mir auffällt, ist dass er beim Buffer eigentlich nen void pointer haben will, also *packet.
Aber da sollte der Compiler eigentlich energisch darauf hin weisen...
Hast du dich denn an die Spezifikationen gehalten?
Nach zu lesen ist das in den Links. Auf den Seiten gibt es noch mehr Infos.
http://www.tecchannel.de/ueberblick/archiv/401866/index5.html
http://de.wikipedia.org/wiki/IP-Paket
http://de.wikipedia.org/wiki/User_Datagram_Protocol
http://de.wikipedia.org/wiki/IPv4
Bitte keine Alluppercase-Überschriften! Außerdem solltest du versuchen dein Problem genauer zu beschreiben und wenn es sich ausschließlich um ein ANSI C Problem handelt, dann stell die Frage bitte im ANSI C-Forum.
Aber vielleicht hilft dir das weiter
http://www.c-plusplus.net/forum/viewtopic-var-t-is-206606.html
und das
http://www.tty1.net/smart-questions_de.html
Hm, ich hätte jetzt doch noch eine kurze Frage dazu, zu der ich lange gesucht aber nichts gefunden habe...
Angenommen ein Parentprozess erstellt zwei Childs.
Wie können beide Childs vom Parent lesen? Und vor allem: Was passiert wenn Child 1 aus der Pipe liest und gleichzeit Child 2 aus der Pipe liest? Sind die Daten in der Pipe nur einmal vorhanden, und es gilt mehr oder weniger zufällig, wer zu erst liest, "liest sie weg" ?
Danke.
Super, dankeschön!
Die boost Bibliothek wollte ich schon länger mal ausprobieren, ist also die Gelegenheit
Hab grad alles installiert und die ersten Beispielprogramme ausgeführt... hat auf Anhieb funktioniert, top!
Danke nochmal
hi,
ich hab hier eine funktion zur berechnung einer ip-header checksumme. leider tut es da irgendwas nicht so ganz, ich krieg immer segmentation faults wenn ich meine prüfsummen-routine aufrufe.
hat jemand eine idee woran das liegen kann? die prüfsumme wird ja nur über den header ermittelt. deswegen subtrahiere ich die payload, aber dennoch schein ich in der routine irgendwann ins leere zu greifen.
kann mir wer helfen oder hat nen tipp für mich ?
unsigned short ip_sum_calc(unsigned short len_ip_header, unsigned short buff[])
{
unsigned short word16;
unsigned long sum=0;
unsigned short i
// make 16 bit words out of every two adjacent 8 bit words in the packet
// and add them up
for (i=0;i<len_ip_header;i=i+2){
word16 =((buff[i]<<8)&0xFF00)+(buff[i+1]&0xFF);
sum = sum + (unsigned long) word16;
}
// take only 16 bits out of the 32 bit sum and add up the carries
while (sum>>16)
sum = (sum & 0xFFFF)+(sum >> 16);
// one's complement the result
sum = ~sum;
return ((unsigned short) sum);
}
//------------schnippel------------------
unsigned int headersize = sizeof(struct ip) + sizeof(struct udphdr);
unsigned int payload = 4096;
unsigned int packetsize = headersize + payload;
unsigned char packet[packetsize];
memset(packet,0,packetsize);
struct ip *iph = (struct ip*) packet;
struct udphdr *udp = (struct udphdr *) packet + sizeof(struct ip);
//---------------schnippel---------------
printf("Checksumme berechnen, Headersize: %i\n", (iph->ip_len - payload));
iph->ip_sum = ip_sum_calc ( (iph->ip_len - payload), (unsigned short*) packet);