TCP 패킷의 데이터페이로드 부분에 중간에서 데이터를 추가/제거 할수 있을까요?
예로 서버 클라이언트 중간의 방화벽에서 HTTP 헤더에 특정 명령을 추가해서 보내게 하고싶은데
단순히 데이터의 내용이 바뀌는것이면 체크섬 재계산만 하면될듯한데 바이트가 추가되면 길이가 바뀌니까 다른 문제들이 생길거같은데... 순서번호도 달라질거고
조언 부탁드립니다
1. 데이터의 변경 데이터를 변경하게 되면 당연히 TCP header 및 IP header의 checksum 값을 계산해 줘야 합니다. 단 바뀌는 내용이 그리 많지 않을 경우에는 checksum을 다시 계산하지 않고 바뀐 부분만 재계산해 주면 됩니다.
2. 데이터 크기의 변경 중간단에서 한번 데이터의 크기가 변경되을 하게 되면 그 다음 TCP packet에서는 변경된 값만큼 SEQ 값 및 ACK 값을 변경해 줘야 합니다. 이 또한 TCP header의 변경을 의미하게 되므로 1번의 작업을 해 줘야 합니다.
3. 데이터 크기가 MTU 크기를 벋어 날 때 데이터 크기가 작아 지면 몰라도 커 지게 될 경우, 그리고 그 크기가 MTU 를 넘어 서게 되면 패킷을 2번(혹은 그 이상) 잘라서 보내 줘야 합니다.
www.gilgil.net
패킷의 변경 내용이 단순한 몇 바이트의 수준이 아니라 많아 진다고 가정을 하는 경우 단순 패킷의 data 변경 로직을 사용하는 것보다는 중간단에 proxy를 두어서 procy단에서 tcp data를 처리(수정)하는 것이 좋습니다.
client --- firewall(패킷처리하는 놈) --- proxy(tcp server 및 tcp client로 구성) --- server
많은 도움되었습니다~
자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
gilgil.net
1. 데이터의 변경
데이터를 변경하게 되면 당연히 TCP header 및 IP header의 checksum 값을 계산해 줘야 합니다. 단 바뀌는 내용이 그리 많지 않을 경우에는 checksum을 다시 계산하지 않고 바뀐 부분만 재계산해 주면 됩니다.
2. 데이터 크기의 변경
중간단에서 한번 데이터의 크기가 변경되을 하게 되면 그 다음 TCP packet에서는 변경된 값만큼 SEQ 값 및 ACK 값을 변경해 줘야 합니다. 이 또한 TCP header의 변경을 의미하게 되므로 1번의 작업을 해 줘야 합니다.
3. 데이터 크기가 MTU 크기를 벋어 날 때
데이터 크기가 작아 지면 몰라도 커 지게 될 경우, 그리고 그 크기가 MTU 를 넘어 서게 되면 패킷을 2번(혹은 그 이상) 잘라서 보내 줘야 합니다.
www.gilgil.net
gilgil.net
패킷의 변경 내용이 단순한 몇 바이트의 수준이 아니라 많아 진다고 가정을 하는 경우 단순 패킷의 data 변경 로직을 사용하는 것보다는 중간단에 proxy를 두어서 procy단에서 tcp data를 처리(수정)하는 것이 좋습니다.
client --- firewall(패킷처리하는 놈) --- proxy(tcp server 및 tcp client로 구성) --- server
www.gilgil.net
감사합니다
많은 도움되었습니다~
자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.
댓글 달기