отображение на консоли - PullRequest
       13

отображение на консоли

1 голос
/ 25 ноября 2010
printf(" Src Address\n");
for(i = 0;i < 4;i++)
    printf(" %d ",((ip->ip_src.s_addr)&(0x0FF<<(i*8)))>>(i*8));

это отображает o / p как 127.0.0.0, так как я использую loopback, но когда я делаю то же самое, 2 отображаю адрес Ethernet, используя тот же

for(i = 0;i <6; i++)
    printf("dest ether:%c",((ethernet->ether_dhost)&(0x0FF<<(i*8)))>>(i*8));

ошибка, которую я получаю, является ошибкой: недопустимые операнды в двоичный файл &

здесь u_char ether_dhost [6]; и переменная, в которой хранится IP-адрес, имеет тип unsigned long int ... как отобразить сетевой адрес ..

Ответы [ 2 ]

3 голосов
/ 25 ноября 2010

Поле s_addr представляет собой 32-разрядное целое число, в котором хранится адрес IPv4. Использование бинарного оператора & на этом работает нормально. Поле ether_dhost, OTOH, представляет собой 6-байтовый массив, и вы не можете манипулировать им, как s_addr. Но опять же, вам не нужно:

for(i = 0; i < 6; i++)
    printf(":%c"+!i, ethernet->ether_dhost[i]);

Кстати, код вашего IP-адреса гораздо сложнее, чем нужно:

for(i = 0; i < 32; i += 8)
    printf(".%d"+!i, (ip->ip_src.s_addr>>i)&0xff);
0 голосов
/ 25 ноября 2010

Если вы используете стандартные struct inet_addr и struct ether_addr, для этого есть стандартные функции.

printf("inet address: %s\n", inet_ntoa(…));
printf("ether address: %s\n", ether_ntoa(…));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...