2013-03-26 2 views
-2

나는 연결을 확립하고 데이터 패킷을 보내는 것처럼 보이는 프로그램을 코딩했습니다. 리눅스에서 raw-socket을 사용하고, C 언어를 사용한다.원시 소켓으로 원시 데이터를 리눅스 (PSH-ACK)에 보냅니다.

아쉽게도 연결이 안정되어 있으므로 프로그램을 정상적으로 구현했습니다. 지금 문제는 내가 서버에서 ACK를 수신하여 psh-ack (데이터 패킷)을 채워야하는 방법을 추측하고 netcat의 출력 버퍼에 데이터를 볼 수 있도록 많은 시간을 할애 할 수 없다는 것입니다 ...

그래서, 누구든지 패킷을 포맷 할 수 있습니까? 나는 너무 많은 시간을 보냈고, 당신에게 교통의 완전한 기록을주는 것은 쉬울 것입니다.

미리 감사드립니다. 희망을 일찌감치 제안 ...;).

추신 : 분명하지 않다면 TCP 네트워크의 프로세스 속도를 높이기 위해 내 사용자 공간 tcp 스택을 구현하는 것처럼 가장하며, 비 차단 프로그램 실행에 네트워킹 프로세스를 포함시키기 만하면됩니다. 네트워킹 프로세스.

여러분 중 일부는 알 수 있듯이, 리눅스 박스는 SYN_ACK을 보낸 서버에 자동으로 응답을 보내지 만 연결은 RST로하고 TCP 스택을 구현하여 연결을 확립 할 수는 없습니다. 그래서, 나는 "TCP/UDP blackhole DoS 예방"이라고 불리는 grsec의 보호 기능을 사용하고 있는데, 이는 리눅스 커널이 "비 일관적인"네트워크 트래픽에 대한 응답을 원하지 않는 것을 방지한다.

그게 전부입니다. http://www.arcesio.net/checksum/checksumTCP.html (편집 대부분의 스페인어 & 영어) :

답변

0
ip.len = tcp_data_sz + tcphdr_sz + iphdr_sz 

tcp.id = id + 1 
tcp.seq = same as ACK of three way handshake 
tcp.ack_seq = same as ACK of three way handshake 

pseudo_hdr.len = tcp_data_sz + tcphdr_sz 

tcp.check = (size: psehdr + tcphdr + tcpdata) (pad with 00's until size % 2 = 0). 

이 링크를 유용했다.

감사합니다.

Linuxios : 좋은 의견에 감사드립니다. 이제 제 해결책이 저의 길을 찾았습니다. (내 방법은 일반적인 리눅스 인터페이스보다 빠릅니다 :).

+0

플래그 : PSH & ACK. – user1189104

관련 문제