2010-04-16 27 views
9

Vì nó được xác định (xem: http://www.freesoft.org/CIE/Course/Section4/8.htm) tiêu đề TCP có trường 'Tùy chọn'. Có một vài lựa chọn đã được xác định (xem: www.iana.org/assignments/tcp-parameters/) nhưng tôi muốn tự mình đưa ra. (Để thử nghiệm/nghiên cứu.)Cách ghi dữ liệu tùy chỉnh vào trường tùy chọn tiêu đề gói TCP bằng Java?

Làm cách nào để Java viết (và sau đó đọc) một số dữ liệu tùy chỉnh vào trường tùy chọn?

Câu hỏi bổ sung: nếu không thể thực hiện được bằng Java. loại ứng dụng nào có thể làm được điều này? (Không, tôi không thực sự cảm thấy như rối tung với một số thực hiện ngăn xếp TCP/IP cấp hạt nhân, tôi muốn giữ mức ứng dụng.)

Cảm ơn!

+0

OS là gì này chủ yếu cần thiết để chạy trên? –

+0

tốt, tốt nhất là hệ điều hành độc lập. nếu không: Linux (RHEL/CentOS) sẽ là chính – Matlabber

Trả lời

8

JNetPcap là thư viện cho phép bạn thay đổi tiêu đề từ các lớp cấp thấp bao gồm TCP. http://jnetpcap.com/node/29

Dưới đây là một ví dụ nhanh:

byte[] pktBytes = FormatUtils.toByteArray("0015c672234c90e6ba92661608004500002d358c4000800600000a000b050a090028c26e270fb8b256e3a2009f785018faf01f550000746573740a"); 
JMemoryPacket packet = new JMemoryPacket(pktBytes); 

packet.scan(Ethernet.ID); //Need to be done before doing any edits 

//Editing Ip layer 
Ip4 ip = packet.getHeader(new Ip4()); 
ip.source(new byte[] {2,6,0,0}); //Source Ip 2.6.0.0 
ip.destination(new byte[] {1,2,3,4}); //Dest Ip 1.2.3.4 

//Editing Tcp layer 
Tcp tcp = packet.getHeader(new Tcp()); 
tcp.destination(5555); //Port destination 5555 

if (pcap.sendPacket(packet) != Pcap.OK) { 
    System.err.println(pcap.getErr()); 
} 
+5

hmm ... Sửa đổi các gói TCP ..smells độc hại – 100rabh

+0

Đó có phải là một Hacker Hàng quý ref tôi thấy không? Tốt nếu có. – braden

+0

@braden đúng vậy. – h3xStream

Các vấn đề liên quan