#include #include #define SWAP(a, b, tmp) tmp=a; a=b; b=tmp void swap_endian(char* x, int size) { char tmp; switch(size) { case 2: SWAP(x[0], x[1], tmp); break; case 4: SWAP(x[0], x[3], tmp); SWAP(x[1], x[2], tmp); break; } } /* for debug */ #if 0 void print_bits(const char* s, int n) { unsigned char* p, mask, x; int i, j; p = (unsigned char *)s; for(i = 0; i < n; i++) { x = p[i]; for(mask = 0x80; mask; mask >>= 1) if(mask & x) putchar('1'); else putchar('0'); } putchar('\n'); } #endif int main(int argc, char** argv) { struct servent* sv; char* name; char* proto; char** s_aliases; int little_endian; little_endian = 1; if(*(char *)&little_endian != 1) little_endian = 0; if(argc != 3) { fprintf(stderr, "Usage: %s name proto\n", argv[0]); return 1; } name = argv[1]; proto = argv[2]; sv = getservbyname(name, proto); if(sv == NULL) { fprintf(stderr, "Unknown service: %s/%s\n", name, proto); return 1; } printf("s_name:\t%s\n", sv->s_name); printf("s_aliases:\n"); for(s_aliases = sv->s_aliases; s_aliases[0]; s_aliases++) printf("\t%s\n", s_aliases[0]); if(little_endian) swap_endian((char *)&sv->s_port, sizeof(sv->s_port)); printf("s_port:\t%d\n", sv->s_port); printf("s_proto:%s\n", sv->s_proto); return 0; }