Как связать сетевое соединение с PID, не используя lsof или netstat?

Проверка токена состоит из серии шагов, и если какой-либо из них завершится неудачно, запрос должен быть отклонен. Вот список всех проверок, которые должен выполнить ваш API:

• Проверьте, правильно ли сформирован JWT

• Проверьте подпись

• Подтвердите стандартные утверждения [117 ]

• Проверьте разрешения приложения (области действия)

Для реализации пользовательской проверки вам необходимо выполнить следующее:

1) Разобрать Jwt

Чтобы выполнить разбор JWT вы можете либо вручную выполнить все проверки, как описано в спецификации RFC 7519> 7.2 Проверка JWT, либо использовать одну из библиотек, перечисленных в разделе «Библиотеки для подписи / проверки токенов» в JWT.io.

Например, если ваш API реализован с Node.js и вы хотите использовать библиотеку node-jsonwebtoken, то вы бы вызвали метод jwt.verify (). Если синтаксический анализ завершится неудачно, библиотека вернет ошибку JsonWebTokenError с сообщением jwt неверно сформировано.

2) Проверка алгоритма подписи

API должен проверить, соответствует ли алгоритм, указанный в заголовке JWT (свойство alg), ожидаемому API. Если нет, токен считается недействительным, и запрос должен быть отклонен.

Чтобы проверить, соответствует ли подпись ожиданиям API, необходимо декодировать JWT и извлечь свойство alg заголовка JWT.

В качестве альтернативы, вы можете использовать одну из библиотек, перечисленных в разделе «Библиотеки для подписи / проверки токенов» JWT.io .

3) Проверка утверждений

Как только API проверяет подпись токена, следующим шагом является проверка стандартных утверждений полезной нагрузки токена. Необходимо выполнить следующие проверки:

• Истечение срока действия токена: текущая дата / время должны предшествовать дате / времени истечения срока, указанному в заявке на получение опыта (которая является меткой времени Unix). Если нет, запрос должен быть отклонен.

• Эмитент токена: заявка «Iss» обозначает эмитента JWT. Значение должно соответствовать значению, настроенному в вашем API. Для JWT, выпущенных Auth0, iss содержит ваш домен Auth0 с префиксом https: // и суффиксом /: https: // YOUR_DOMAIN / . Если вы используете функцию пользовательских доменов, вместо этого значение будет иметь следующий формат: https: ///.

• Аудитория токенов: утверждение Audit идентифицирует получателей, для которых предназначен JWT. Для JWT, выпущенных Auth0, Audholds содержит уникальный идентификатор целевого API (поле «Идентификатор» в настройках вашего API). Если API не является целевой аудиторией JWT, он должен отклонить запрос.

Вот библиотека JWT для JAVA, где вы можете использовать метод проверки (токен) для проверки.

https://github.com/auth0/java-jwt

9
задан raven 4 December 2009 в 15:02
поделиться

5 ответов

I don't know how often you need to poll, or what you mean with "expensive", but with the right options both netstat and lsof run a lot faster than in the default configuration.
Examples:

netstat -ltn

shows only listening tcp sockets, and omits the (slow) name resolution that is on by default.

lsof -b -n -i4tcp:80

omits all blocking operations, name resolution, and limits the selection to IPv4 tcp sockets on port 80.

8
ответ дан 4 December 2019 в 12:21
поделиться

Why don't you look at the source code of netstat and see how it get's the information? It's open source.

1
ответ дан 4 December 2019 в 12:21
поделиться

For Linux, have a look at the /proc/net directory (for example, cat /proc/net/tcp lists your tcp connections). Not sure about Solaris.

Some more information here.

I guess netstat basically uses this exact same information so i don't know if you will be able to speed it up a whole lot. Be sure to try the netstat '-an' flags to NOT resolve ip-adresses to hostnames realtime (as this can take a lot of time due to dns queries).

1
ответ дан 4 December 2019 в 12:21
поделиться

Проще всего сделать

strace -f netstat -na

В Linux (я не знаю о Solaris). Это даст вам журнал всех выполненных системных вызовов. Это много результатов, некоторые из которых будут актуальными. Взгляните на файлы в файловой системе / proc, которую он открывает. Это должно привести вас к тому, как это делает netstat. Как ни странно, ltrace позволяет вам делать то же самое через библиотеку c. Бесполезно для вас в данном случае, но может быть полезно в других обстоятельствах.

Если это не ясно из этого, взгляните на источник.

1
ответ дан 4 December 2019 в 12:21
поделиться

On Solaris you can use pfiles(1) to do this:

# ps -fp 308 
     UID   PID  PPID   C    STIME TTY         TIME CMD
    root   308   255   0 22:44:07 ?           0:00 /usr/lib/ssh/sshd
# pfiles 308 | egrep 'S_IFSOCK|sockname: '
   6: S_IFSOCK mode:0666 dev:326,0 ino:3255 uid:0 gid:0 size:0
        sockname: AF_INET 192.168.1.30  port: 22

For Linux, this is more complex (gruesome):

# pgrep sshd
3155
# ls -l /proc/3155/fd | fgrep socket
lrwx------ 1 root root 64 May 22 23:04 3 -> socket:[7529]
# fgrep 7529 /proc/3155/net/tcp 
   6: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7529 1 f5baa8a0 300 0 0 2 -1            

00000000:0016 is 0.0.0.0:22. Here's the equivalent output from netstat -a:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
6
ответ дан 4 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

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