Доступ к выходным данным карты сетевого интерфейса

int 0x80предполагает i386; другие архитектуры могут использовать другие вещи , например. syscallна amd64 . Если переключение контекста происходит каждый раз, когда выполняется системный вызов, это должно быть легко заметно, если мы запустим программу, которая генерирует невероятно большое количество системных вызовов. К счастью, у меня есть именно такая программа.

bits 64

section.text

global _start

_start: mov r9,9551615
        mov rax,1       ; sys_write
        mov rdi,1       ; stdout
        mov rsi,letter
        mov rdx,1       ; length

_again: syscall
        dec r9
        jnz _again

        mov rax,60      ; sys_exit
        mov rdi,0       ; exit code
        syscall

section.data
letter: db "a"

Когда мы скомпилируем это на 64-битной -системе Linux и запустим под perf, мы увидим

$ nasm -f elf64 -g -F dwarf -o max.o max.asm
$ ld -o max max.o
$ sudo perf stat./max > /dev/null 2> perf.log
$ grep context perf.log
                88      context-switches          #    0.051 K/sec                  

$ 

всего 88 переключений контекста для этого процесса; если бы происходило переключение контекста каждый раз, когда ядро ​​находится в контексте процесса, мы должны были бы увидеть где-то ближе к 9551615 переключениям контекста.

Сейчас! Если вы хотите, чтобы система работала с переключениями контекста, запустите вышеописанное подstrace

$ strace -c./max
...

А в другом окне уже запущен vmstat 1...

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    896 333928   2132 3124628    0    0     0     0   74   98  0  0 100  0  0
 0  0    896 333896   2132 3124628    0    0     0     0   89  103  0  0 100  0  0
 0  0    896 333896   2132 3124628    0    0     0     0   65   85  0  0 100  0  0
 0  0    896 333896   2132 3124628    0    0     0     0   67   83  0  0 100  0  0
 2  0    896 333756   2132 3124628    0    0     0     0 21460 529902 10 29 61  0  0
 3  0    896 333832   2132 3124628    0    0     0     0 23690 652506 13 32 55  0  0
 1  0    896 333832   2132 3124628    0    0     0     0 27574 673152 11 33 55  0  0
 0  0    896 333768   2132 3124628    0    0     0     0 24351 650723 11 30 59  0  0

Кажется довольно очевидным, когда straceиmax(и другое программное обеспечение, если вы забыли /dev/null, вывод )начал дико переключаться между ними.

0
23.06.2019, 09:39
1 ответ

«Физический уровень», используемый для WLAN, сложнее, чем вы думаете, на самом деле это несколько уровней.

Из коробки, без взлома и модификации прошивки конкретной карты, самое низкое, что можно получить, это захват пакетов с заголовками 802.11,включив «режим монитора» в этом драйвере (, который обычно дает вам второй интерфейс WLAN ).

Wireshark может захватывать и отображать эти заголовки. См., например. здесь для получения подробной информации см. man iw, как включить режим монитора, используйте iw phy, чтобы узнать, поддерживает ли ваше оборудование режим монитора.

См. aircrack-ngдля других инструментов, которые вы можете использовать для захвата и внедрения пакетов на этом уровне.

0
28.01.2020, 03:32

Теги

Похожие вопросы