Сетевая глава Linux «Остальная часть необитаемого острова» (5)

Linux Эксплуатация и техническое обслуживание
Сетевая глава Linux «Остальная часть необитаемого острова» (5)

Вы хотите оценить сетевое подключение, выполнив команду ping google.com? Я думаю, что вы в оскорблении профессоров. Эта статья является пятой статьей, сетевыми статьями, но не будет учить вас FQ. Видеть:

Linux «Остальная часть необитаемого острова» (1) Подготовка

Linux "Остальная часть необитаемого острова" (2) ЦП

«Остальная часть необитаемого острова» в памяти Linux (3)

Linux «Остальная часть необитаемого острова» (4) Ввод-вывод

Глядя на сотни сетевых команд в kali linux, я впал в медитацию. Профессиональных сетевых команд слишком много, если перечислять, то их тысячи. Отдельные лица не тестеры на проникновение, и большинство функций являются лишь поверхностными. Поэтому данная статья представляет собой очень простое техническое резюме, в котором основное внимание уделяется лишь некоторым командам Linux, обычно используемым в работе.

так какnioпопулярностьck10kВопрос стал прошедшим временем. Теперь только один сервер может поддерживать сотни тысяч уровней. Затем мы расстроемся, 1 миллион подключений требуется много ресурсов.

Прежде всего, каждое соединение является дескриптором файла, поэтому оно должно поддерживать количество файловых дескрипторов.Каждый сокет занимает от 15 до 20 КБ памяти.Таким образом, только для поддержания соответствующего сокета необходимо20Gпамяти; пропускная способность, необходимая для передачи сообщения размером 1 КБ, составляет1000M!

Просмотр текущих системных подключений

Как посмотреть, сколько соединений имеет текущая система? можно использоватьnetstatкомбинироватьawkЗаймитесь статистикой. Следующий скрипт подсчитывает количество tcp-соединений в каждом состоянии.

# netstat -antp | awk '{a[$6]++}END{ for(x in a)print x,a[x]}'
LISTEN 41
CLOSE_WAIT 24
ESTABLISHED 150
Foreign 1
TIME_WAIT 92

Но если вы выполняете эту команду на сервере с десятками тысяч соединений, вы можете в конечном итоге ждать долгое время. Итак, у нас есть второе поколение статистики сети сети:netstat => ss(Не путать с этим инструментом для джейлбрейка).

# ss -s
Total: 191 (kernel 220)
TCP:   5056 (estab 42, closed 5000, orphaned 3, synrecv 0, timewait 5000/0), ports 3469
...

netstatпринадлежатьnet-toolsнабор инструментов, покаssпринадлежатьiproute. Его команда соответствует следующему, пора прощаться с net-tools.

использовать net-tools iproute
статистика ifconfig ss
адрес netstat ip addr
маршрутизация route ip route
сосед arp ip neigh
VPN iptunnel ip tunnel
VLAN vconfig ip link
многоадресная рассылка ipmaddr ip maddr

СС команда

основное использование

Давайте посмотрим на использование Ss в соответствии с сценарием использования.

Просмотр TCP-подключений, которые прослушивает система.

ss -atr 
ss -atn #仅ip

Просмотр всех подключений в системе

ss -alt

Просмотрите pid процесса, прослушивающего порт 444.

ss -ltp | grep 444

Проверить, какие порты заняты процессом 555

ss -ltp | grep 555

показать все udp соединения

ss -u -a

Чтобы просмотреть сокеты TCP, используйте параметр -ta Для просмотра сокетов UDP используйте параметр -ua Чтобы просмотреть сокеты RAW, используйте параметр -wa Чтобы просмотреть сокеты UNIX, используйте параметр -xa.

И все соединения для IP

ss dst 10.66.224.130
ss dst 10.66.224.130:http
ss dst 10.66.224.130:smtp
ss dst 10.66.224.130:443

показать все http соединения

ss  dport = :http

Просмотрите 10 лучших IP-адресов с наибольшим количеством подключений к машине.

netstat -antp | awk '{print $4}' | cut -d ':' -f1 | sort | uniq -c  | sort -n -k1 -r | head -n 10

Recv-Q и Send-Q

Обратите внимание на результат выполнения ss, поясним Recv-Q и Send-Q.

Эти два значения, вLISTENиESTABСостояния представляют разные значения. В общем, нормальные приложения должны иметь оба значения 0 (кроме отставания). Чем больше значение, тем серьезнее проблема.

ПРОСЛУШАТЬ статус

  • Recv-Q: показывает, сколько установленных подключений не было принято. Например, Nginx медленно принимает новые подключения.

  • Send-Q: представляет значение очереди прослушивания

Статус ЭСТАБ

  • Recv-Q: Сколько байтов (байтов) данных в ядре не было прочитано приложением, произошла определенная степень блокировки

  • Send-Q: Указывает, сколько (байт) данных все еще находится в очереди отправки в ядре, которые не получили подтверждение, и возможности обработки приема на одноранговой стороне не являются сильными.

Просмотр сетевого трафика

Посмотреть трафик

Есть много инструментов для наблюдения за сетевым трафиком, но sar — ​​мой любимый. sar — ​​наиболее полное программное обеспечение для мониторинга в Linux. Как показано, используйтеsar -n DEV 1Вы можете обновлять сетевой трафик каждую секунду.

Конечно, вы также можете использовать ifstat, nload, iptraf и другие команды для просмотра. Однако источник данных по-прежнему находится в нашем каталоге /proc.

watch cat /proc/net/dev

Просмотр IP-адресов, на которые приходится наибольший трафик

Иногда мы обнаруживаем, что пропускная способность сети очень высока, но в итоге мы не можем определить, откуда приходит трафик. В это время iftop может помочь при занятости. Как показано, можно легко узнать, какой трафик с хоста.

Когда вы не уверены в источнике трафика интранета, например, кто-то напрягает, вызов API необоснован и т. д., вы можете найти его таким образом.

захват пакетов

tcpdump

Когда нам нужно оценить, есть ли трафик, или отладить сложную проблему с сетевым приложением, мы можем сделать дальнейшие выводы, перехватив пакеты. В Linux это можно сделать черезtcpdumpкоманда, чтобы получить данные, а затем использоватьWiresharkанализ.

tcpdump -i eth0 -nn -s0 -v port 80
  • -iУкажите сетевую карту для захвата пакетов
  • -nКак SS, это означает, что доменное имя не решено
  • -nnДва n означают, что порт также является числом, в противном случае он разрешается в имя службы.
  • -sУстановите длину захвата, 0 означает отсутствие ограничений
  • -vОтображение подробного вывода при захвате пакетов, -vv, -vvv более подробные по порядку

1) Присоединяйтесь-Aопция будет печатать ascii,-XРаспечатайте шестнадцатеричный код.

tcpdump -A -s0 port 80

2) IP-адрес конкретных пакетов, связанных с выборкой

tcpdump -i eth0 host 10.10.1.1
tcpdump -i eth0 dst 10.10.1.20

3)-wПараметр записывает захваченный пакет в файл

tcpdump -i eth0 -s0 -w test.pcap

4) tcpdump поддерживает выражения, а есть и более сложные примеры, такие как запросы на получение и публикацию в системе захвата (не https)

tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

узнать большехакер target.com/tcpdump - отвратительно...

Захваченные данные можно просмотреть с помощью wireshark.

http захват

Инструмент захвата пакетов сам по себе как агент, способный сканировать ваш браузер для связи между сервером и обеспечивать выполнение модификаций, повторов, пакетных функций. Проблема найдена, инструмент анализа протокола, место атаки. Обычно используются следующие три:

  • Burpsuite (кроссплатформенный)
  • Fiddle2 (Win)
  • Charles (Mac)

Делайте плохие вещи тайком.

Репликация трафика

Вам может потребоваться воспроизвести фактический HTTP-трафик вашей производственной среды в среде разработки или промежуточной среде, чтобы использовать функцию репликации трафика. Есть три инструмента на выбор, лично склоняюсь к Гору.

  • Gor
  • TCPReplay
  • TCPCopy

Слишком много соединений

Согласно введению TCP/IP, сокет содержит около 10 состояний соединения. В нашей повседневной работе, помимо атак типа «отказ в обслуживании» против SYN, если возникает аномалия, существует высокая вероятность того, что это проблема TIME_WAIT и CLOSE_WAIT. Проблема TIME_WAIT обычно решается путем оптимизации параметров ядра; проблема CLOSE_WAIT обычно возникает из-за неразумного программирования и должна привлекать внимание разработчиков.

TIME_WAIT

TIME_WAIT — это состояние, поддерживаемое стороной, которая активно закрывает соединение.Как и серверы nginx и сканеры, часто возникает большое количество соединений в состоянии time_wait. TCP обычно ожидает после закрытия соединения.2MS, затем полностью закройте соединение. Поскольку HTTP использует протокол TCP, на этих серверах существует задержка соединений в состоянии TIME_WAIT, которые часто переключают соединения.

Некоторые системы могут видеть следующую информацию через dmesg.

__ratelimit: 2170 callbacks suppressed
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow

Просмотрев через команду ss -s, вы можете увидеть, что тайм-ауты уже 2w.

ss -s
Total: 174 (kernel 199)
TCP:   20047 (estab 32, closed 20000, orphaned 4, synrecv 0, timewait 20000/0), ports 10785

Эти параметры можно установить с помощью команды sysctl.Если вы хотите, чтобы перезапуск вступил в силу, добавьте его в файл /etc/sysctl.conf.

# 修改阈值
net.ipv4.tcp_max_tw_buckets = 50000 
# 表示开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_tw_reuse = 1
#启用timewait 快速回收。这个一定要开启,默认是关闭的。
net.ipv4.tcp_tw_recycle= 1   
# 修改系統默认的TIMEOUT时间,默认是60s
net.ipv4.tcp_fin_timeout = 10

Если вы проверяете параметры, вы можете использовать Sysctl -w net.ipv4.tcp_tw_reuse = 1 такую ​​команду. Если вы пишете в файл, используйте SYSCTL -P, чтобы вступить в силу.

CLOSE_WAIT

Close_wait Обычно из-за активного конца закрыта, наша причина вызвала должным образом обработать должным образом. Чтобы ясно положить, именно рассматривать программу, принадлежащую к большим вредам.

Возьмем для иллюстрации типичный случай, с которым столкнулся "csdn homophonic Taro".

Код представляет собой фрагмент использования с использованием HttpClient. В этом коде ресурс подключения очищается вызовом in.close(). Но, к сожалению, в коде есть суждение: соединение, не находящееся в состоянии 200, напрямую возвращает null. при этих обстоятельствах,inШанса присвоения нет, и естественно его нельзя закрыть, и тогда происходит утечка соединения.

Итак, правильный способ закрыть HttpClient — использовать его API:abort().

Другие общие команды

применение

# 断点续传下载文件
wget -c $url
# 下载整站
wget -r -p -np -k $url
# 发送网络连接(常用)
curl -XGET $url
# 传输文件
scp
sftp
# 数据镜像备份
rsync

Инструмент обнаружения

# 连通性检测
ping google.com
# 到对端路由检测
tracepath google.com
# 域名检测
dig google.com
nslookup google.com
# 网络扫描工具
nmap
# 压力测试
iperf
# 全方位监控工具(好东西)
nmon

Инструмент конфигурации

# 停止某个网卡
ifdown
# 开启某个网卡
ifup
# 多功能管理工具 
ethtool

испытание давлением

wrk
ab
webbench
http_load

Мульти инструмент

# 远程登录
telnet
ssh
nc
# 防火墙
iptables -L

конец

В дополнение к основным инструментам, многие сетевые команды, упомянутые в этой статье, не предустановлены заранее и должны быть установлены с помощью yum. Для изучения сетевого программирования, я думаю, достаточно прочитать книгу "TCP/IP Detailed Explanation Volume 1: Protocol", а затем написать несколько приложений Netty. Я нашел онлайн-копию здесь, и мне не нужно тратить деньги, чтобы купить ее.Woohoo.52IM.net/topic - Критиковать...  

Если вы хотите углубиться, вы можете выбрать:

  • «Подробное объяснение TCP / IP, том 1: протокол»
  • "Сетевое программирование UNIX"
  • Полное руководство по Netty

Мы уже упоминали NIO в главе «Ввод-вывод» и не будем здесь подробно описывать его. Когда вы сталкиваетесь с так называемыми проблемами распаковки и приклеивания, проблемами сердцебиения и ограничения тока и даже проблемами формирования трафика, это доказывает, что вы все ближе и ближе приближаетесь к профессиональному программисту сетевого программирования.