various ip scanning fixes
This commit is contained in:
parent
3076acc1f2
commit
b3edc1f613
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
t.c
9
t.c
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user