Java TCP Socket Sniffing - PullRequest
       19

Java TCP Socket Sniffing

6 голосов
/ 26 февраля 2009

Я использую сокеты TCP для передачи данных между сервером и клиентской программой, используя определенный номер порта на одном компьютере (localhost).

Мне нужно программное обеспечение, которое может захватывать данные, отправляемые / получаемые через этот сокет?

(или)

Какой самый простой способ прослушивания пакетов с указанного порта в Java?

Ответы [ 7 ]

7 голосов
/ 26 февраля 2009

Я предлагаю использовать Wireshark. Он прост в использовании и работает на многих платформах.

http://www.wireshark.org/

4 голосов
/ 26 февраля 2009

Если вы занимаетесь кодированием (а не просто используете wireshark / tcpdump), у вас есть несколько вариантов. Если вы хотите придерживаться Java, то единственный (?) Вариант использования необработанных сокетов - через JNI, и есть несколько библиотек, которые могут помочь, например:

  • jNetPcap - обертка вокруг собственных библиотек libpcap / winpcap, раскрывающая все их функции и структуры
  • RockSaw - API для использования необработанных сокетов
1 голос
/ 20 мая 2016

Запустите вашу программу так:

java -Djavax.net.debug=all helloworld.java

Переключатель полностью задокументирован на странице Oracle JSSE

Плюсы:

  • Гораздо проще, чем другие предлагаемые решения (не требует внешнего программного обеспечения)
  • Может также расшифровать / сбросить соединения TLS / SSL:)

Минусы:

  • Это будет работать только , если вы используете классы с java.net.* например. OutputStream или InputStream Это не будет работать, если вы используете необработанные сокеты. Это задокументировано в ссылке.
  • Поверьте, это может работать только на Oracle JDK.
1 голос
/ 29 марта 2012

Tcpdump также можно использовать напрямую, если объем трафика невысок, что устраняет необходимость использования wireshark. Просто что-то вроде

tcpdump -ni lo0 port 1234

должно быть всем, что вам нужно (lo0 - это петлевой интерфейс во всех системах Unix / Linux; конечно, также измените номер порта).

1 голос
/ 26 февраля 2009

Если вы не возражаете против использования командной строки, попробуйте netcat . Это позволит вам прослушивать порт и выводить вывод в файл, если хотите.
Вы также можете заставить его отправлять поддельные данные и записывать ответ.

Я часто использую его в качестве притворного HTTP-прокси (и настраиваю Firefox для его использования), чтобы обнаружить, что отправляется по проводам.

1 голос
/ 26 февраля 2009

Самый простой способ - заменить InputStream / OutputStream из сокета в одной из программ реализацией прокси, которая либо печатает / записывает в журнал, либо "тисает" в оригинал и поток печати / журнала. 1003 *

Но есть много снифферов, если вы действительно хотите запутаться.

0 голосов
/ 13 ноября 2011

Вы можете использовать tcpdump, что дает вам множество вариантов. Вы сохраняете запись в файле .pcap с параметром -w, и когда вы закончите, вы открываете этот файл с помощью wireshark. Преимущество этого способа заключается в том, что вы можете захватывать высокую скорость пакетов в секунду, не влияя на общую производительность вашего компьютера (даже если это низкий уровень).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...