hi ich will ein programm schreiben welches (ich weiss dases auch mit grep und cut geht unter linux ) aus einer nmap-log file , zeile für zeile aus liest und wenn am ende einer zeile Up steht dann die ip die am anfang der zeile steht mir aus giebt ,beispiel
host: 123.123.123.123 (telekom.de) status:Up
aber er gibt immer nur die erste ip aus warum ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
FILE *stream;
char *loc,dateiname[22];
char si[61];
char zeichen1[6];
char zeichen2[64];
int ch=6;
strcpy(dateiname,"/home/melsa/pinging");
strcpy(zeichen1,"Up");
if((stream = fopen(dateiname,"r"))
==NULL) {
printf("
Error bein öffnen
");
exit(1);
}
for(;!feof(stream) {
fgets(si,62,stream);
strcpy(zeichen2,si);
loc=strstr(si,zeichen1);
if(loc != NULL){
for (ch;ch<=19;ch++){
printf("%c",zeichen2[ch]);
}
}
datei parsen
Re: datei parsen
Probier mal:
<font face="Courier New">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
FILE *stream;
char *loc,dateiname[22];
char si[61];
char zeichen1[6];
char zeichen2[64];
int ch=6;
strcpy(dateiname,"/home/melsa/pinging");
strcpy(zeichen1,"Up");
if((stream = fopen(dateiname,"r"))
==NULL) {
printf(" Error bein öffnen ");
exit(1);
}
for(;!feof(stream);){
fgets(si,62,stream);
strcpy(zeichen2,si);
loc=strstr(si,zeichen1);
if(loc != NULL){
for (ch=6;ch<=19;ch++){
printf("%c",zeichen2[ch]);
}
printf("\<!--no-->n");
}
}
}
</font><!--fixed-->
Ich habe einige Klammern anderst gesetzt und ch mit 6 initialisiert.
<font face="Courier New">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
FILE *stream;
char *loc,dateiname[22];
char si[61];
char zeichen1[6];
char zeichen2[64];
int ch=6;
strcpy(dateiname,"/home/melsa/pinging");
strcpy(zeichen1,"Up");
if((stream = fopen(dateiname,"r"))
==NULL) {
printf(" Error bein öffnen ");
exit(1);
}
for(;!feof(stream);){
fgets(si,62,stream);
strcpy(zeichen2,si);
loc=strstr(si,zeichen1);
if(loc != NULL){
for (ch=6;ch<=19;ch++){
printf("%c",zeichen2[ch]);
}
printf("\<!--no-->n");
}
}
}
</font><!--fixed-->
Ich habe einige Klammern anderst gesetzt und ch mit 6 initialisiert.
Re: datei parsen
versuch mal dies, gibt dir egall wie lang die ip adresse ist diese aus, gibt alles aus bis zum naechsten leerzeichen:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 512
int main(int argc, char **argv) {
FILE *fd;
char *filename = "test.log";
char strline[MAX];
char searchstr[] = "Up";
char *p;
fd = fopen(filename, "r");
if(fd == NULL) {
fprintf(stderr, "cannot open %s", filename);
exit(1);
}
while(fgets(strline, MAX, fd) != NULL){
if(strstr(strline, searchstr) != NULL){
p = strpbrk(strline, "1234567890");
while(p[0] != ' '){
printf("%c", *p);
p++;
}
printf("\<!--no-->n");
}
}
fclose(fd);
exit(0);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 512
int main(int argc, char **argv) {
FILE *fd;
char *filename = "test.log";
char strline[MAX];
char searchstr[] = "Up";
char *p;
fd = fopen(filename, "r");
if(fd == NULL) {
fprintf(stderr, "cannot open %s", filename);
exit(1);
}
while(fgets(strline, MAX, fd) != NULL){
if(strstr(strline, searchstr) != NULL){
p = strpbrk(strline, "1234567890");
while(p[0] != ' '){
printf("%c", *p);
p++;
}
printf("\<!--no-->n");
}
}
fclose(fd);
exit(0);
}
Re: datei parsen
wobei zur sicherheit, wenn mal nach der ip kein leerzeichen kommt du noch einen abbruchkontrolle implementieren solltest.
int i=0;
while(p[0] != ' ' && i < 15){
printf("%c", *p);
p++;
i++;
}
so in der art
prospero
int i=0;
while(p[0] != ' ' && i < 15){
printf("%c", *p);
p++;
i++;
}
so in der art
prospero