Возможно вы искали: 'Dream Farm'

May 15 2025 18:03:17
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » [Phrack] Interface Promiscuity Obscurity (security interface)

[Phrack] Interface Promiscuity Obscurity (security interface)

Ключевые слова: security, interface, (найти похожие документы)

Subject: [Phrack] Interface Promiscuity Obscurity
---[ Phrack Magazine Volume 8, Issue 53 July 8, 1998, article 10 of 15


-------------------------[ Interface Promiscuity Obscurity


--------[ apk <apk@itl.waw.pl>



----[ INTRODUCTION

Normally, when you put an interface into promiscuous mode, it sets a flag
in the device interface structure telling the world (or anyone who wants
to check) that the device, is indeed, in promiscuous mode. This is, of
course, annoying to those of you who want to obscure this fact from prying
administrative eyes. Behold intrepid hacker, your salvation is at hand.
The following modules for FreeBSD, Linux, HP-UX, IRIX and Solaris allow you
to obscure the IFF_PROMISC bit and run all your wonderful little packet
sniffers incognito...


----[ IMPLEMENTATION DETAILS

Usage of the code is simple. After you put the interface into promiscuous
mode, you can clean the IFF_PROMISC flag with:

`./i <interface> 0`

and reset the flag with:

`./i <interface> 1`.

Note that these programs only change interface's flag value, they don't affect
NIC status. On systems which allow setting promiscuous mode by SIOCSIFFLAGS
however, any call to SIOCSIFFLAGS will make the change take effect (e.g. after
clearing promisc flag:

'ifconfig <interface> up'

will really turn off promiscuous mode). Systems for which above is true are:
FreeBSD, Linux, Irix. On these three you can run a sniffer in non-promiscuous
mode, and then some time later set IFF_PROIMISC on the interface, then with
the above command set promiscuous mode for interface. This is most useful on
FreeBSD because in doing this you won't get that annoying `promiscuous mode
enabled for <interface>' message in the dmesg buffer (it's only logged when
you enable promiscuous mode via bpf by BIOCPROMISC).

On Solaris, every alias has its own flags, so you can set flags for any alias:

'interface[:<alias number>]'

(because Solaris doesn't set IFF_PROMISC when you turn on promiscuous mode
using DLPI you don't need this program however).


----[ THE CODE

<++> EX/promisc/freebsd-p.c
/*
* promiscuous flag changer v0.1, apk
* FreeBSD version, compile with -lkvm
*
* usage: promisc [interface 0|1]
*
* note: look at README for notes
*/

#ifdef __FreeBSD__
# include <osreldate.h>
# if __FreeBSD_version >= 300000
# define FBSD3
# endif
#endif

#include <sys/types.h>
#include <sys/time.h>

#include <sys/socket.h>
#include <net/if.h>
#ifdef FBSD3
# include <net/if_var.h>
#endif

#include <kvm.h>
#include <nlist.h>

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

#define IFFBITS
"1UP2BROADCAST3DEBUG4LOOPBACK5POINTOPOINT6NOTRAILERS7RUNNING"
"10NOARP11PROMISC12ALLMULTI13OACTIVE14SIMPLEX15LINK016LINK117LINK2"
"20MULTICAST"

struct nlist nl[] = {
{ "_ifnet" },
#define N_IFNET 0
{ "" }
};

int kread(kvm_t *kd, u_long addr, void *buf, int len) {
int c;

if ((c = kvm_read(kd, addr, buf, len)) != len)
return -1;
return c;
}

int kwrite(kvm_t *kd, u_long addr, void *buf, int len) {
int c;

if ((c = kvm_write(kd, addr, buf, len)) != len)
return -1;
return c;
}

void usage(char *s) {
printf("usage: %s [interface 0|1]n", s);
exit(1);
}

int main(int argc, char *argv[]) {
#ifdef FBSD3
struct ifnethead ifh;
#endif
struct ifnet ifn, *ifp;
char ifname[IFNAMSIZ];
int unit, promisc, i, any;
char *interface, *cp;
kvm_t *kd;

switch (argc) {
case 1:
promisc = -1;
interface = NULL;
break;
case 3:
interface = argv[1];
if ((cp = strpbrk(interface, "1234567890")) == NULL) {
printf("bad interface name: %sn", interface);
exit(1);
}
unit = strtol(cp, NULL, 10);
*cp = 0;
promisc = atoi(argv[2]);
break;
default:
usage(argv[0]);
}

if ((kd = kvm_open(NULL, NULL, NULL, O_RDWR, argv[0])) == NULL)
exit(1);

if (kvm_nlist(kd, nl) == -1) {
perror("kvm_nlist");
exit(1);
}

if (nl[N_IFNET].n_type == 0) {
printf("Cannot find symbol: %sn", nl[N_IFNET].n_name);
exit(1);
}

#ifdef FBSD3
if (kread(kd, nl[N_IFNET].n_value, &ifh, sizeof(ifh)) == -1) {
perror("kread");
exit(1);
}
ifp = ifh.tqh_first;
#else
if (kread(kd, nl[N_IFNET].n_value, &ifp, sizeof(ifp)) == -1) {
perror("kread");
exit(1);
}
if (kread(kd, (u_long)ifp, &ifp, sizeof(ifp)) == -1) {
perror("kread");
exit(1);
}
#endif

#ifdef FBSD3
for (; ifp; ifp = ifn.if_link.tqe_next) {
#else
for (; ifp; ifp = ifn.if_next) {
#endif
if (kread(kd, (u_long)ifp, &ifn, sizeof(ifn)) == -1) {
perror("kread");
break;
}
if (kread(kd, (u_long)ifn.if_name, ifname, sizeof(ifname)) == -1) {
perror("kread");
break;
}
printf("%d: %s%d, flags=0x%x ", ifn.if_index, ifname, ifn.if_unit,
(unsigned short)ifn.if_flags);
/* this is from ifconfig sources */
cp = IFFBITS;
any = 0;
putchar('<');
while ((i = *cp++) != 0) {
if (ifn.if_flags & (1 << (i-1))) {
if (any)
putchar(',');
any = 1;
for (; *cp > 32; )
putchar(*cp++);
} else
for (; *cp > 32; cp++)
;
}
putchar('>');
putchar('n');
if (interface && strcmp(interface, ifname) == 0 && unit == ifn.if_unit) {
switch (promisc) {
case -1:
break;
case 0: if ((ifn.if_flags & IFF_PROMISC) == 0)
printf("tIFF_PROMISC not setn");
else {
printf("t%s%d: clearing IFF_PROMISCn", ifname, unit);
ifn.if_flags &= ~IFF_PROMISC;
if (kwrite(kd, (u_long)ifp, &ifn, sizeof(ifn)) == -1)
perror("kwrite");
}
break;
default: if ((ifn.if_flags & IFF_PROMISC) == IFF_PROMISC)
printf("tIFF_PROMISC set alreadyn");
else {
printf("t%s%d: setting IFF_PROMISCn", ifname, unit);
ifn.if_flags |= IFF_PROMISC;
if (kwrite(kd, (u_long)ifp, &ifn, sizeof(ifn)) == -1)
perror("kwrite");
}
break;

}
}
}
}
<-->
<++> EX/promisc/hpux-p.c
/*
* promiscuous flag changer v0.1, apk
* HP-UX version, on HP-UX 9.x compile with -DHPUX9
*
* usage: promisc [interface 0|1]
*
* note: look at README for notes
*/

/* #define HPUX9 on HP-UX 9.x */

#include <sys/types.h>
#include <sys/socket.h>

#include <net/if.h>

#include <nlist.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

#ifndef HPUX9
# define PATH_VMUNIX "/stand/vmunix"
#else
# define PATH_VMUNIX "/hp-ux"
#endif

#define PATH_KMEM "/dev/kmem"
#define IFFBITS
"1UP2BROADCAST3DEBUG4LOOPBACK5POINTOPOINT6NOTRAILERS7RUNNING"
"10NOARP11PROMISC12ALLMULTI13LOCALSUBNETS14MULTICAST15CKO16xNOACC"

struct nlist nl[] = {
{ "ifnet" },
#define N_IFNET 0
{ "" }
};

int kread(fd, addr, buf, len)
int fd, len;
off_t addr;
void *buf;
{
int c;

if (lseek(fd, addr, SEEK_SET) == -1)
return -1;
if ((c = read(fd, buf, len)) != len)
return -1;
return c;
}

int kwrite(fd, addr, buf, len)
int fd, len;
off_t addr;
void *buf;
{
int c;

if (lseek(fd, addr, SEEK_SET) == -1)
return -1;
if ((c = write(fd, buf, len)) != len)
return -1;
return c;
}

void usage(s)
char *s;
{
printf("usage: %s [interface 0|1]n", s);
exit(1);
}

main(argc, argv)
int argc;
char **argv;
{
struct ifnet ifn, *ifp;
char ifname[IFNAMSIZ];
int fd, unit, promisc, i, any;
char *interface, *cp;

switch (argc) {
case 1:
promisc = -1;
interface = NULL;
break;
case 3:
interface = argv[1];
if ((cp = strpbrk(interface, "1234567890")) == NULL) {
printf("bad interface name: %sn", interface);
exit(1);
}
unit = strtol(cp, NULL, 10);
*cp = 0;
promisc = atoi(argv[2]);
break;
default:
usage(argv[0]);
}

if (nlist(PATH_VMUNIX, nl) == -1) {
perror(PATH_VMUNIX);
exit(1);
}
if (nl[N_IFNET].n_type == 0) {
printf("Cannot find symbol: %sn", nl[0].n_name);
exit(1);
}

if ((fd = open(PATH_KMEM, O_RDWR)) == -1) {
perror(PATH_KMEM);
exit(1);
}
if (kread(fd, nl[N_IFNET].n_value, &ifp, sizeof(ifp)) == -1) {
perror("kread");
exit(1);
}

for (; ifp; ifp = ifn.if_next) {
if (kread(fd, (u_long)ifp, &ifn, sizeof(ifn)) == -1) {
perror("kread");
break;
}
if (kread(fd, (u_long)ifn.if_name, ifname, sizeof(ifname)) == -1) {
perror("kread");
break;
}
printf("%d: %s%d, flags=0x%x ", ifn.if_index, ifname, ifn.if_unit,
ifn.if_flags);
cp = IFFBITS;
any = 0;
putchar('<');
while ((i = *cp++) != 0) {
if (ifn.if_flags & (1 << (i-1))) {
if (any)
putchar(',');
any = 1;
for (; *cp > 32; )
putchar(*cp++);
} else
for (; *cp > 32; cp++)
;
}
putchar('>');
putchar('n');
if (interface && strcmp(interface, ifname) == 0 && unit == ifn.if_unit) {
switch (promisc) {
case -1:
break;
case 0: if ((ifn.if_flags & IFF_PROMISC) == 0)
printf("tIFF_PROMISC not setn");
else {
printf("t%s%d: clearing IFF_PROMISCn", ifname, unit);
ifn.if_flags &= ~IFF_PROMISC;
if (kwrite(fd, (u_long)ifp, &ifn, sizeof(ifn)) == -1)
break;
}
break;
default: if ((ifn.if_flags & IFF_PROMISC) == IFF_PROMISC)
printf("tIFF_PROMISC set alreadyn");
else {
printf("t%s%d: setting IFF_PROMISCn", ifname, unit);
ifn.if_flags |= IFF_PROMISC;
if (kwrite(fd, (u_long)ifp, &ifn, sizeof(ifn)) == -1)
break;
}

}
}
}
}
<-->
<++> EX/promisc/irix-p.c
/*
* promiscuous flag changer v0.1, apk
* Irix version, on Irix 6.x compile with -lelf, on 5.x with -lmld
*
* usage: promisc [interface 0|1]
*
* note: look at README for notes on irix64 compile with -DI64 -64
*/

/* #define I64 for Irix64*/

#include <sys/types.h>
#include <sys/socket.h>

#include <net/if.h>

#include <nlist.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

#define PATH_VMUNIX "/unix"

#define PATH_KMEM "/dev/kmem"
#define IFFBITS
"1UP2BROADCAST3DEBUG4LOOPBACK5POINTOPOINT6NOTRAILERS7RUNNING"
"10NOARP11PROMISC12ALLMULTI13LOCALSUBNETS14MULTICAST15CKO16xNOACC"

#ifdef I64
struct nlist64 nl[] = {
#else
struct nlist nl[] = {
#endif
{ "ifnet" },
#define N_IFNET 0
{ "" }
};

int kread(int fd, off_t addr, void *buf, int len) {
int c;

#ifdef I64
if (lseek64(fd, (off_t)addr, SEEK_SET) == -1)
#else
if (lseek(fd, (off_t)addr, SEEK_SET) == -1)
#endif
return -1;
if ((c = read(fd, buf, len)) != len)
return -1;
return c;
}

int kwrite(int fd, off_t addr, void *buf, int len) {
int c;

#ifdef I64
if (lseek64(fd, (off_t)addr, SEEK_SET) == -1)
#else
if (lseek(fd, (off_t)addr, SEEK_SET) == -1)
#endif
return -1;
if ((c = write(fd, buf, len)) != len)
return -1;
return c;
}

void usage(s)
char *s;
{
printf("usage: %s [interface 0|1]n", s);
exit(1);
}

main(argc, argv)
int argc;
char **argv;
{
struct ifnet ifn, *ifp;
char ifname[IFNAMSIZ];
int fd, unit, promisc, i, any;
char *interface, *cp;

switch (argc) {
case 1:
promisc = -1;
interface = NULL;
break;
case 3:
interface = argv[1];
if ((cp = strpbrk(interface, "1234567890")) == NULL) {
printf("bad interface name: %sn", interface);
exit(1);
}
unit = strtol(cp, NULL, 10);
*cp = 0;
promisc = atoi(argv[2]);
break;
default:
usage(argv[0]);
}

#ifdef I64
if (nlist64(PATH_VMUNIX, nl) == -1) {
#else
if (nlist(PATH_VMUNIX, nl) == -1) {
#endif
perror(PATH_VMUNIX);
exit(1);
}
if (nl[N_IFNET].n_type == 0) {
printf("Cannot find symbol: %sn", nl[0].n_name);
exit(1);
}

if ((fd = open(PATH_KMEM, O_RDWR)) == -1) {
perror(PATH_KMEM);
exit(1);
}
if (kread(fd, nl[N_IFNET].n_value, &ifp, sizeof(ifp)) == -1) {
perror("kread");
exit(1);
}

for (; ifp; ifp = ifn.if_next) {
if (kread(fd, (u_long)ifp, &ifn, sizeof(ifn)) == -1) {
perror("kread");
break;
}
if (kread(fd, (u_long)ifn.if_name, ifname, sizeof(ifname)) == -1) {
perror("kread");
break;
}
printf("%d: %s%d, flags=0x%x ", ifn.if_index, ifname, ifn.if_unit,
ifn.if_flags);
cp = IFFBITS;
any = 0;
putchar('<');
while ((i = *cp++) != 0) {
if (ifn.if_flags & (1 << (i-1))) {
if (any)
putchar(',');
any = 1;
for (; *cp > 32; )
putchar(*cp++);
} else
for (; *cp > 32; cp++)
;
}
putchar('>');
putchar('n');
if (interface && strcmp(interface, ifname) == 0 && unit == ifn.if_unit) {
switch (promisc) {
case -1:
break;
case 0: if ((ifn.if_flags & IFF_PROMISC) == 0)
printf("tIFF_PROMISC not setn");
else {
printf("t%s%d: clearing IFF_PROMISCn", ifname, unit);
ifn.if_flags &= ~IFF_PROMISC;
if (kwrite(fd, (u_long)ifp, &ifn, sizeof(ifn)) == -1)
break;
}
break;
default: if ((ifn.if_flags & IFF_PROMISC) == IFF_PROMISC)
printf("tIFF_PROMISC set alreadyn");
else {
printf("t%s%d: setting IFF_PROMISCn", ifname, unit);
ifn.if_flags |= IFF_PROMISC;
if (kwrite(fd, (u_long)ifp, &ifn, sizeof(ifn)) == -1)
break;
}

}
}
}
}
<-->
<++> EX/promisc/linux-p.c
/*
* promiscuous flag changer v0.1, apk
* Linux version
*
* usage: promisc [interface 0|1]
*
* note: look at README for notes
*/

#include <sys/types.h>
#include <sys/socket.h>

#include <net/if.h>
#define __KERNEL__
#include <linux/netdevice.h>
#undef __KERNEL__

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

#define HEAD_NAME "dev_base"
#define PATH_KSYMS "/proc/ksyms"
#define PATH_KMEM "/dev/mem"
#define IFFBITS
"1UP2BROADCAST3DEBUG4LOOPBACK5POINTOPOINT6NOTRAILERS7RUNNING"
"10NOARP11PROMISC12ALLMULTI13MASTER14SLAVE15MULTICAST"

int kread(int fd, u_long addr, void *buf, int len) {
int c;

if (lseek(fd, (off_t)addr, SEEK_SET) == -1)
return -1;
if ((c = read(fd, buf, len)) != len)
return -1;
return c;
}

int kwrite(int fd, u_long addr, void *buf, int len) {
int c;

if (lseek(fd, (off_t)addr, SEEK_SET) == -1)
return -1;
if ((c = write(fd, buf, len)) != len)
return -1;
return c;
}

void usage(char *s) {
printf("usage: %s [interface 0|1]n", s);
exit(1);
}

main(int argc, char *argv[]) {
struct device devn, *devp;
char ifname[IFNAMSIZ];
int fd, unit, promisc, i, any;
char *interface, *cp;
FILE *fp;
char line[256], symname[256];

switch (argc) {
case 1:
promisc = -1;
interface = NULL;
break;
case 3:
interface = argv[1];
unit = 0;
if ((cp = strchr(interface, ':')) != NULL) {
*cp++ = 0;
unit = strtol(cp, NULL, 10);
}
promisc = atoi(argv[2]);
break;
default:
usage(argv[0]);
}

if ((fp = fopen(PATH_KSYMS, "r")) == NULL) {
perror(PATH_KSYMS);
exit(1);
}

devp = NULL;
while (fgets(line, sizeof(line), fp) != NULL &&
sscanf(line, "%x %s", &i, symname) == 2)
if (strcmp(symname, HEAD_NAME) == 0) {
devp = (struct device *)i;
break;
}
fclose(fp);
if (devp == NULL) {
printf("Cannot find symbol: %sn", HEAD_NAME);
exit(1);
}

if ((fd = open(PATH_KMEM, O_RDWR)) == -1) {
perror(PATH_KMEM);
exit(1);
}
if (kread(fd, (u_long)devp, &devp, sizeof(devp)) == -1) {
perror("kread");
exit(1);
}

for (; devp; devp = devn.next) {
if (kread(fd, (u_long)devp, &devn, sizeof(devn)) == -1) {
perror("kread");
break;
}
if (kread(fd, (u_long)devn.name, ifname, sizeof(ifname)) == -1) {
perror("kread");
break;
}
printf("%s: flags=0x%x ", ifname, devn.flags);
cp = IFFBITS;
any = 0;
putchar('<');
while ((i = *cp++) != 0) {
if (devn.flags & (1 << (i-1))) {
if (any)
putchar(',');
any = 1;
for (; *cp > 32; )
putchar(*cp++);
} else
for (; *cp > 32; cp++)
;
}
putchar('>');
putchar('n');
/* This sux */
/* if (interface && strcmp(interface, ifname) == 0 && unit == ifn.if_unit) {*/
if (interface && strcmp(interface, ifname) == 0) {
switch (promisc) {
case -1:
break;
case 0: if ((devn.flags & IFF_PROMISC) == 0)
printf("tIFF_PROMISC not setn");
else {
printf("t%s: clearing IFF_PROMISCn", ifname);
devn.flags &= ~IFF_PROMISC;
if (kwrite(fd, (u_long)devp, &devn, sizeof(devn)) == -1)
break;
}
break;
default: if ((devn.flags & IFF_PROMISC) == IFF_PROMISC)
printf("tIFF_PROMISC set alreadyn");
else {
printf("t%s: setting IFF_PROMISCn", ifname);
devn.flags |= IFF_PROMISC;
if (kwrite(fd, (u_long)devp, &devn, sizeof(devn)) == -1)
break;
}

}
}
}
}
<-->
<++> EX/promisc/socket-p.c
/*
* This is really dumb program.
* Works on Linux, FreeBSD and Irix.
* Check README for comments.
*/

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
int sd;
struct ifreq ifr;
char *interface;
int promisc;

if (argc != 3) {
printf("usage: %s interface 0|1n", argv[0]);
exit(1);
}
interface = argv[1];
promisc = atoi(argv[2]);

if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
perror("socket");
exit(1);
}
strncpy(ifr.ifr_name, interface, IFNAMSIZ);
if (ioctl(sd, SIOCGIFFLAGS, &ifr) == -1) {
perror("SIOCGIFFLAGS");
exit(1);
}
printf("flags = 0x%xn", (u_short)ifr.ifr_flags);
if (promisc)
ifr.ifr_flags |= IFF_PROMISC;
else
ifr.ifr_flags &= ~IFF_PROMISC;
if (ioctl(sd, SIOCSIFFLAGS, &ifr) == -1) {
perror("SIOCSIFFLAGS");
exit(1);
}
close(sd);
}
<-->
<++> EX/promisc/solaris-p.c
/*
* promiscuous flag changer v0.1, apk
* Solaris version, compile with -lkvm -lelf
*
* usage: promisc [interface 0|1]
* (interface has "interface[:<alias number>]" format, e.g. le0:1 or le0)
*
* note: look at README for notes because DLPI promiscuous request doesn't
* set IFF_PROMISC this version is kinda useless.
*/

#include <sys/types.h>
#include <sys/time.h>

#include <sys/stream.h>
#include <sys/socket.h>
#include <net/if.h>

#define _KERNEL
#include <inet/common.h>
#include <inet/led.h>
#include <inet/ip.h>
#undef _KERNEL

#include <kvm.h>
#include <nlist.h>

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

#define IFFBITS
"1UP2BROADCAST3DEBUG4LOOPBACK5POINTOPOINT6NOTRAILERS7RUNNING"
"10NOARP11PROMISC12ALLMULTI13INTELLIGENT14MULTICAST15MULTI_BCAST"
"16UNNUMBERED17PRIVATE"

struct nlist nl[] = {
{ "ill_g_head" },
#define N_ILL_G_HEAD 0
{ "" }
};

int kread(kvm_t *kd, u_long addr, void *buf, int len) {
int c;

if ((c = kvm_read(kd, addr, buf, len)) != len)
return -1;
return c;
}

int kwrite(kvm_t *kd, u_long addr, void *buf, int len) {
int c;

if ((c = kvm_write(kd, addr, buf, len)) != len)
return -1;
return c;
}

void usage(char *s) {
printf("usage: %s [interface 0|1]n", s);
exit(1);
}

int main(int argc, char *argv[]) {
ill_t illn, *illp;
ipif_t ipifn, *ipifp;
char ifname[IFNAMSIZ]; /* XXX IFNAMSIZ? */
int unit, promisc, i, any;
char *interface, *cp;
kvm_t *kd;

switch (argc) {
case 1:
promisc = -1;
interface = NULL;
break;
case 3:
interface = argv[1];
unit = 0;
if ((cp = strchr(interface, ':')) != NULL) {
*cp++ = 0;
unit = strtol(cp, NULL, 10);
}
promisc = atoi(argv[2]);
break;
default:
usage(argv[0]);
}

if ((kd = kvm_open(NULL, NULL, NULL, O_RDWR, argv[0])) == NULL)
exit(1);

if (kvm_nlist(kd, nl) == -1) {
perror("kvm_nlist");
exit(1);
}

if (nl[N_ILL_G_HEAD].n_type == 0) {
printf("Cannot find symbol: %sn", nl[N_ILL_G_HEAD].n_name);
exit(1);
}

if (kread(kd, nl[N_ILL_G_HEAD].n_value, &illp, sizeof(illp)) == -1) {
perror("kread");
exit(1);
}

for (; illp; illp = illn.ill_next) {
if (kread(kd, (u_long)illp, &illn, sizeof(illn)) == -1) {
perror("kread");
break;
}
if (kread(kd, (u_long)illn.ill_name, ifname, sizeof(ifname)) == -1) {
perror("kread");
break;
}
ipifp = illn.ill_ipif;
/* on Solaris you can set different flags for every alias, so we do */
for (; ipifp; ipifp = ipifn.ipif_next) {
if (kread(kd, (u_long)ipifp, &ipifn, sizeof(ipifn)) == -1) {
perror("kread");
break;
}
printf("%s:%d, flags=0x%x ", ifname, ipifn.ipif_id, ipifn.ipif_flags);
cp = IFFBITS;
any = 0;
putchar('<');
while ((i = *cp++) != 0) {
if (ipifn.ipif_flags & (1 << (i-1))) {
if (any)
putchar(',');
any = 1;
for (; *cp > 32; )
putchar(*cp++);
} else
for (; *cp > 32; cp++)
;
}
putchar('>');
putchar('n');
if (interface && strcmp(interface, ifname) == 0 && unit == ipifn.ipif_id){
switch (promisc) {
case -1:
break;
case 0: if ((ipifn.ipif_flags & IFF_PROMISC) == 0)
printf("tIFF_PROMISC not setn");
else {
printf("t%s:%d: clearing IFF_PROMISCn", ifname, unit);
ipifn.ipif_flags &= ~IFF_PROMISC;
if (kwrite(kd, (u_long)ipifp, &ipifn, sizeof(ipifn)) == -1)
perror("kwrite");
}
break;
default: if ((ipifn.ipif_flags & IFF_PROMISC) == IFF_PROMISC)
printf("tIFF_PROMISC set alreadyn");
else {
printf("t%s:%d: setting IFF_PROMISCn", ifname, unit);
ipifn.ipif_flags |= IFF_PROMISC;
if (kwrite(kd, (u_long)ipifp, &ipifn, sizeof(ipifn)) == -1)
perror("kwrite");
}
break;
}
}
}
}
}
<-->

----[ EOF
474 Прочтений •  [[Phrack] Interface Promiscuity Obscurity (security interface)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• [Phrack] Interface Promiscuity Obsc... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка