Как сохранить пакеты, полученные сетевым интерфейсом или каким-либо портом, в файл и повторно отправить полученные пакеты при необходимости? - PullRequest
1 голос
/ 31 августа 2011

Я делаю свою работу над программой-службой сервера в Linux, которая обрабатывает пакеты, отправленные в гнездо, которое она слушает. Уже существует такая старая служба, которая прослушивает порт, выполняющий свою работу, и Я не могу остановить службу старого сервера, и мне нужно получить пакеты, отправленные на старый сервер, и отправить их в мою новую службу сервера, чтобы убедиться, что она работает хорошо. Как я могу получить пакет и повторно отправить его в мою новую службу ? Существует ли такой инструмент или есть некоторые функции, которые уже предоставляет такие инструменты, как tcpdump? Спасибо:)

1 Ответ

1 голос
/ 31 августа 2011

Для протоколов без установления соединения, таких как UDP, вы можете записывать данные с помощью tcpdump и повторно отправлять их с помощью netcat.

Для протоколов, ориентированных на установление соединения, таких как TCP, я думаю, что это не так просто, потому что TCP ожидает, что ваши пакеты будут иметь правильные значения в подтвержденных номерах подтверждения, которые будут отличаться между вашими записанными пакетами и недавно установленным соединением TCP.В этом случае вам нужно будет установить соединение вручную (т. Е. Иметь для этого специальное приложение) и переслать только полезную нагрузку.Может быть, есть какое-то легкодоступное приложение для этой цели (извлечь полезную информацию из формата tcpdump и отправить ее на удаленный компьютер), я не могу сказать.Но написать такое приложение довольно просто.

Кстати, то же самое относится и к UDP, если ваш сервер поддерживает какую-то последовательность секвенирования своими собственными - повторно отправленные пакеты могут иметь порядковые номера, которых ваш сервер не ожидаетполучить.

...