Skip to content

Commit

Permalink
Add source and readme
Browse files Browse the repository at this point in the history
  • Loading branch information
Kulikov Nikolay committed Apr 9, 2024
1 parent e24b3dc commit cc47c93
Show file tree
Hide file tree
Showing 5 changed files with 609 additions and 0 deletions.
106 changes: 106 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Дамп трафика с нескольких Linux хостов

Инструмент предназначен для возможности снимать dump трафика с нескольких Linux-хостов в реальном времени одновременно через ssh и получать их в одном окне Wireshark. Для этого используется конвертация в формат pcapng посредством dumpcap(часть пакета Wireshark, не требуется доустанавливать).

## Installation
---
Для компиляции или запуска нужен Golang. Можно просто запустить:
```
go run multipleDump.go
```
Или скомпилировать. Для удобства компиляции можно использовать скрипт build_win_linux_macos.sh. Далее для работы использовать бинарный файл и конфиг hosts.conf. **Версия Wireshark при этом должна быть не менее 3.6**.

## Примеры конфигурации
---

В файле hosts.conf в формате json находится конфиг. Содержит пути для бинарников Wireshark в разных ОС(Windows, MacOS, для Linux путь не нужен).

Далее массив элементов каждый из которых представляет собой набор настроек для доступа по SSH на один Linux-хост, а так же параметры запуска tcpdump на удаленном хосте.
Пример одного элемента

```
{
"UserHost":"[email protected]",
"HostPort":"-p 21059",
"Key":"-i $HOME/.ssh/id_rsa.priv",
"Interface":"any",
"PcapFilter":"not tcp port ssh and host 10.1.1.1",
"Timeout":"100"
}
```
Все настройки в том формате в которых их ожидает стандартный ssh-клиент и tcpdump. То есть поля UserHost, HostPort, Key это ключи которые необходимо передать стандартному ssh-клиенту на вашей рабочей машине чтобы зайти на удаленный хост. Если какой то из параметров вам не нужен то заменяем его значение на пробел.
PcapFilter, Interface - параметры для запуска tcpdump на удаленном хосте.

**В параметрах ssh можно писать разные конструкции имея ввиду что это всего лишь параметры для команды ssh.** То есть если такой параметр примет ssh, то и в конфиг его можно вставлять в таком же формате.
Пример:
```
{ "UserHost":"-J [email protected] [email protected]",
"HostPort":"-p 22",
"Key":"-i C:\\work\\keys\\key_pass\\ssh_key.priv",
"Interface":"eth2",
"PcapFilter":"host 8.8.8.8",
"Timeout":"100"
}
```


**Следующий пример.** Если у вас параметры подключения к хосту расписаны в конфиге ssh-клиента(например для unix-like os это в ~/.ssh/config) например так:

```
Host JumpHost
IdentityFile /Users/user/.ssh/id_rsa.priv
Hostname 10.2.2.2
User user.my
Host host1
IdentityFile /Users/user/.ssh/id_rsa.priv
ProxyJump JumpHost
Hostname 10.10.10.10
User user.my
```

и вам надо снять дамп с хоста host1, то в конфиге в параметре UserHost пишем просто название хоста из конфига ssh. То есть:

```
{
"UserHost":"host1",
"HostPort":" ",
"Key":" ",
"Interface":"eth2",
"PcapFilter":"host 8.8.8.8",
"Timeout":"100"
}
```
В параметры HostPort и Key вставляем пробелы.

## Параметры
---

**UserHost** - пользователь@хост (параметр ssh)

**HostPort** - параметр ssh для указания порта(обязательно с -p. Параметр ssh)

**Key** - путь к закрытому ключу по которому Linux-хост нас пускает(обязательно с -i. Параметр ssh)

**Interface** - имя интерфейса с которого снимается дамп(это параметр команды tcpdump на удаленном хосте)

**PcapFilter** - фильтр который передается команде tcpdump

**Timeout** - для безопасности на удаленном хосте tcpdump запускается с командой timeout, чтобы в случае каких то поломок/отвалов подключения он не остался висеть в процессах вечно. Можно поставить и 0, но надо понимать этот риск.

## Запуск бинарного файла
---
MAC(после компиляции):
```
./multipleDump.bin.Macos
```
Windows:
```
.\multipleDump.exe
```
Linux:
```
./multipleDump.bin.Linux
```

Wireshark запустится автоматически, для чего в начале конфига указаны пути до его бинарных файлов. В пути для бинарника не вашей операционной системы можно поставить просто пробел.
5 changes: 5 additions & 0 deletions build_win_linux_macos.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

GOOS=windows GOARCH=amd64 go build -o multipleDump.exe multipleDump.go
GOOS=darwin GOARCH=amd64 go build -o multipleDump.bin.Macos multipleDump.go
GOOS=linux GOARCH=amd64 go build -o multipleDump.bin.Linux multipleDump.go
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module MultipleDumps

go 1.19
37 changes: 37 additions & 0 deletions hosts.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"WindowsWireshark":"C:\\Program Files\\Wireshark\\Wireshark.exe",
"MacOSWireshark":"/Applications/Wireshark.app/Contents/MacOS/Wireshark",
"Hosts":[
{
"UserHost":"[email protected]",
"HostPort":"-p 22",
"_Key":"path to ssh key file",
"Key":"-i /home/user/.ssh/id_rsa.priv",
"Interface":"any",
"_PcapFilter":"pcap expression for tcpdump",
"PcapFilter":"host 1.1.1.1",
"_Timeout":"for timeout command on remote host",
"Timeout":"60"
},
{
"_UserHost":"if you have auth settings in your ~/.ssh/config - just use hostname",
"UserHost":"host1",
"_HostPort":"use spaces if you have settings in your ~/.ssh/config",
"HostPort":" ",
"_Key":" ",
"Key":" ",
"_Interface":"you can use different interface for each host",
"Interface":"eth1",
"PcapFilter":"host 8.8.8.8",
"Timeout":"60"
},
{
"UserHost":"host2",
"HostPort":" ",
"Key":" ",
"Interface":"tunnel.5",
"PcapFilter":"host 4.2.2.2",
"Timeout":"99"
}
]
}
Loading

0 comments on commit cc47c93

Please sign in to comment.