|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
|
Stringa java in programma C
Ho un programma scritto in C che utilizza una interfaccia Java. il programma
scritto in C prende tra i vari parametri anche una stringa. il metodo libnet_name2addr6 prende come secondo parametro una stringa (so_ip). s_ip è la stringa java che viene passata al metodo C. Se scrivo così mi da errore. perchè? char buf_s_ip[128]; const char *so_ip = (*env)->GetStringUTFChars(env, s_ip, 0); struct libnet_in6_addr dest_ip = libnet_name2addr6(l, so_ip, LIBNET_DONT_RESOLVE); |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
prova a postare + codice e in maniera più leggibile, ook
__________________
My gaming placement |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
|
#include <String.h>
#include <stdio.h> #include <libnet.h> #include "Ipktgenipv6.h" JNIEXPORT jint JNICALL Java_Ipktgenipv6_Pktgenipv6 (JNIEnv *env, jobject obj, jchar tc, jlong fl, jchar nh, jchar hl, jstring s_ip, jstring d_ip, jbyteArray payload) { struct input_struct { u_char tc; u_long fl; u_char nh; /* next header */ u_char hl; /* hop limit */ u_char *data; /* ip payload */ u_short data_size; /* ip payload size */ } input; u_short h_lenght; /* header lenght */ char err_buf[LIBNET_ERRBUF_SIZE]; /* error buffer */ libnet_t *l; /* libnet context handler */ char buf_s_ip[128]; const char *so_ip = (*env)->GetStringUTFChars(env, s_ip, 0); strcopy(buf_s_ip,so_ip); (*env)->ReleaseStringUTFChars(env, s_ip, so_ip); char buf_d_ip[128]; const char *de_ip = (*env)->GetStringUTFChars(env, s_ip, 0); (*env)->ReleaseStringUTFChars(env, d_ip, de_ip); /* set default */ jsize len = (*env)->GetArrayLength(env, payload); jbyte *body = (*env)->GetByteArrayElements(env, payload, 0); char cpayload [len]; int i; for (i=0; i<len; i++) { cpayload[i] = body[i]; } input.data_size=len; input.data=(u_char*)cpayload; /* initialize libnet_t* */ if ((l=libnet_init(LIBNET_RAW6, /* injection type */ NULL, /* network interface */ err_buf))==NULL) /* error buffer */ { //fprintf (stderr, "Error: %s\n", err_buf); return -1; } struct libnet_in6_addr source_ip = libnet_name2addr6(l, (*env)-> NewStringUTF(env, strupr(buf_s_ip)), LIBNET_DONT_RESOLVE); struct libnet_in6_addr dest_ip = libnet_name2addr6(l, de_ip, LIBNET_DONT_RESOLVE); /* build ipv4 header */ if (libnet_build_ipv6 ( tc, /* traffic class */ fl, /* flow label */ h_lenght+input.data_size, /* len */ nh, /* tos */ hl, /* id */ source_ip, /* source address */ dest_ip, /* destination address */ NULL, /* ip payload */ 0, /* ip payload size */ l, /* libnet context */ 0 /* we don't need ptag */ )==-1) { //fprintf (stderr, "Error %s\n", libnet_geterror(l)); return -1; } //printf ("* IP header builded\n"); /* write packet */ libnet_write(l); // fprintf (stderr, "Error %s\n", libnet_geterror(l)); // printf ("* Packet correctly wrote on wire: %d bytes\n", n); /* destroy all */ libnet_destroy(l); return 1; } |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:02.



















