Kaynağa Gözat

various ip scanning fixes

master
Felix von Leitner 19 yıl önce
ebeveyn
işleme
b7517067cb
4 değiştirilmiş dosya ile 16 ekleme ve 7 silme
  1. +1
    -1
      socket/scan_ip4.c
  2. +6
    -2
      socket/scan_ip6.c
  3. +0
    -4
      socket/socket_mcleave6.c
  4. +9
    -0
      t.c

+ 1
- 1
socket/scan_ip4.c Dosyayı Görüntüle

@@ -13,7 +13,7 @@ unsigned int scan_ip4(const char *s,char ip[4])
len+=(j=scan_ulong(s,&u))+1;
if (!j) return 0;
ip[i]=u; s+=j;
if (*s!='.') return 0; ++s;
if (i<3 && *s!='.') return 0; ++s;
}
return len-1;
}

+ 6
- 2
socket/scan_ip6.c Dosyayı Görüntüle

@@ -22,6 +22,10 @@ unsigned int scan_ip6(const char *s,char ip[16])

for (i=0; i<16; i++) ip[i]=0;

if ((i=scan_ip4(s,ip+12))) {
for (len=0; len<12; ++len) ip[len]=V4mappedprefix[len];
return i;
}
for (;;) {
if (*s == ':') {
len++;
@@ -36,7 +40,7 @@ unsigned int scan_ip6(const char *s,char ip[16])
if (!i) return 0;
if (prefixlen==12 && s[i]=='.') {
/* the last 4 bytes may be written as IPv4 address */
i=ip4_scan(s,ip+12);
i=scan_ip4(s,ip+12);
if (i)
return i+len;
else
@@ -64,7 +68,7 @@ unsigned int scan_ip6(const char *s,char ip[16])
break;
}
if (suffixlen+prefixlen<=12 && s[i]=='.') {
int j=ip4_scan(s,suffix+suffixlen);
int j=scan_ip4(s,suffix+suffixlen);
if (j) {
suffixlen+=4;
len+=j;


+ 0
- 4
socket/socket_mcleave6.c Dosyayı Görüntüle

@@ -25,11 +25,7 @@ int socket_mcleave6(int s,const char ip[16])
return socket_mcleave4(s,ip+12);
#ifdef LIBC_HAS_IP6
byte_copy(&opt.ipv6mr_multiaddr,16,ip);
#ifdef __GLIBC__
opt.ipv6mr_interface=0;
#else
opt.ipv6mr_ifindex=0;
#endif
return setsockopt(s,IPPROTO_IPV6,IPV6_DROP_MEMBERSHIP,&opt,sizeof opt);
#else
errno=EPROTO;


+ 9
- 0
t.c Dosyayı Görüntüle

@@ -14,10 +14,19 @@
__asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx")

int main(int argc,char* argv[]) {
char ip[16];
int i;
if ((i=scan_ip6(argv[1],ip))) {
char buf[128];
buf[fmt_ip6(buf,ip)]=0;
puts(buf);
}
#if 0
char buf[100];
strcpy(buf,"foobarbaz");
buf[fmt_fill(buf,3,5,100)]=0;
printf("\"%s\"\n",buf);
#endif
#if 0
unsigned long len;
char *c=mmap_read("/etc/passwd",&len);


Yükleniyor…
İptal
Kaydet