ac3x
19-07-2005, 11:29
Guten morgen,
ich hab mal wieder ein Problem mit C und Zeigern.
Ich möchte gerne die IP von einem Raw-Socket ausgeben oder besser, die IP soll in einen String rein.
gcc gibt auch bei mir keine Fehler aus.
Die Funktion inet_ntoa(); gibt einen "char *" zurück.
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
int main(int argc, char *argv[])
{
char *zwischenspeicher;
char *srcip, *dstip;
char buffer[1024];
struct in_addr addr;
int r, bytes;
struct iphdr *ip;
r = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
if (r == -1)
{
perror("socket() failed");
return 1;
}
bytes = recv(r, buffer, sizeof(buffer), 0);
ip = (struct iphdr *) buffer;
addr.s_addr = ip->saddr;
srcip = inet_ntoa(addr);
printf("IP-Address S \t%s\n", srcip);
}
Wenn ich das Programm ausführe bekomme ich die korrekte IP-Address von einem IP-Packet.
Wenn ich jedoch noch 3 Zeilen hinzufüge und das printf() in der letzten Zeile verschiebe sieht das so aus :
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
int main(int argc, char *argv[])
{
char *zwischenspeicher;
char *srcip, *dstip;
char buffer[1024];
struct in_addr addr;
int r, bytes;
struct iphdr *ip;
r = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
if (r == -1)
{
perror("socket() failed");
return 1;
}
bytes = recv(r, buffer, sizeof(buffer), 0);
ip = (struct iphdr *) buffer;
addr.s_addr = ip->saddr;
srcip = inet_ntoa(addr);
addr.s_addr = ip->daddr;
dstip = inet_ntoa(addr);
printf("IP-Address S \t%s\n", srcip);
printf("IP-Address D \t%s\n", dstip);
}
bekomme ich sowohl beim der SourceIP meine Lokale IP z.b 192.168.1.2 als auch bei der DestinationIP die gleiche.
Was mache ich falsch ?
Kann mir jemand helfen ?
Gruß ac3x
ich hab mal wieder ein Problem mit C und Zeigern.
Ich möchte gerne die IP von einem Raw-Socket ausgeben oder besser, die IP soll in einen String rein.
gcc gibt auch bei mir keine Fehler aus.
Die Funktion inet_ntoa(); gibt einen "char *" zurück.
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
int main(int argc, char *argv[])
{
char *zwischenspeicher;
char *srcip, *dstip;
char buffer[1024];
struct in_addr addr;
int r, bytes;
struct iphdr *ip;
r = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
if (r == -1)
{
perror("socket() failed");
return 1;
}
bytes = recv(r, buffer, sizeof(buffer), 0);
ip = (struct iphdr *) buffer;
addr.s_addr = ip->saddr;
srcip = inet_ntoa(addr);
printf("IP-Address S \t%s\n", srcip);
}
Wenn ich das Programm ausführe bekomme ich die korrekte IP-Address von einem IP-Packet.
Wenn ich jedoch noch 3 Zeilen hinzufüge und das printf() in der letzten Zeile verschiebe sieht das so aus :
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
int main(int argc, char *argv[])
{
char *zwischenspeicher;
char *srcip, *dstip;
char buffer[1024];
struct in_addr addr;
int r, bytes;
struct iphdr *ip;
r = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
if (r == -1)
{
perror("socket() failed");
return 1;
}
bytes = recv(r, buffer, sizeof(buffer), 0);
ip = (struct iphdr *) buffer;
addr.s_addr = ip->saddr;
srcip = inet_ntoa(addr);
addr.s_addr = ip->daddr;
dstip = inet_ntoa(addr);
printf("IP-Address S \t%s\n", srcip);
printf("IP-Address D \t%s\n", dstip);
}
bekomme ich sowohl beim der SourceIP meine Lokale IP z.b 192.168.1.2 als auch bei der DestinationIP die gleiche.
Was mache ich falsch ?
Kann mir jemand helfen ?
Gruß ac3x