Можно ли изменить заголовок TCP в Java? Если это возможно, существует ли метод [Изменить заголовок]?
Отвечая на более узкий вопрос из названия вашего вопроса ("Как изменить исходный ip в Java"), вы можете привязать свой сокет к локальному IP-адресу и/или порту, прежде чем подключать его к получателю.
IP-адрес, к которому вы привязываетесь, должен быть IP-адресом, который имеет ваш компьютер (в противном случае, как пакеты могут вернуться на ваш компьютер?). Вы также можете использовать любой неиспользуемый номер незарезервированного порта для подключения.
Socket socket = new Socket();
socket.bind(new InetSocketAddress(9999));
// or: socket.bind(new InetSocketAddress(InetAddress.getByAddress(...), 9999));
socket.connect(new InetSocketAddress(InetAddress.getLocalHost(), 80));
В общем случае ответ отрицательный, вы не можете просто случайно изменить заголовок TCP. Но есть много настроек, которые вы можете сделать с Java, которые повлияют на то, что входит в заголовок TCP.
Мне интересно, не собираетесь ли вы обмануть сервер, предоставив случайный источник ip. Насколько я знаю, в java нет возможности сделать это. И даже если вы изменили свой IP-адрес, я думаю, вы не можете успешно "сотрясать руку" с сервером, а это значит, что вы не можете установить TCP-соединение с серверной стороной.