winpcap를 이용해서 VC++ 프로그래밍 중입니다.

sepiros의 이미지

현재 패킷을 모니터링 하는 중인데..

특정 포트 번호를 사용하면..

서버에서... 그 해당 ip로 패킷을 내려보낼려고 합니다.

특정 싸이트에 접속을 하게 한다든지.. 차단을 시키다든지..

어느분께서..winpcap는 패킷을 모니터링(복사 후 보는거) 라서.. 차단이 어렵다고 하는데..

되신 send packet 해서 rst를 내려 보내면.. tcp에서 자동으로 차단이 된다고 하네요.

지금 제가 궁금한건.. send packet 하는 부분이.. 어렵네요..

메뉴얼 보면서. 여기까지 왓는데..

리눅스가 아니지만. 여기가. 네트워크 쪽은... 강하다고 들었습니다..

그럼. 고수, 중수, 하수. 모든 상관하지 않고.. 귀담아 듣겠습니다.

감사합니다.

bleu의 이미지

http://www.packetfactory.net/projects/libnet/

이 이사이트 참고 하세요.
그리고 패킷 생성하는건..윈도에서 가능할지 모르겠습니다.
찾아보면 라이브러리가 있긴 있을텐데..
libnet쪽 프로젝트가 윈도우쪽에 옮겨졌는지..잘을 모르겠어서리..
윈도쪽으로 사용해보질 안아서리..

한번 찾아 보시고 안되면..

리눅스쪽에서 해셔야 할겁니다..
그리고 만약 한다면..pcap+libnet 형태가 될텐데..
하시려는 프로젝트로 볼때..두개의 조합보다는
공부하시거나..좋은 결과물을 원하신다면..
다른 방향을 알아보시는게..좋을듯 한데..

http://wiki.kldp.org/wiki.php/DocbookSgml/Netfilter-hacking-TRANS

이쪽을 한번 보시고 고민 해보시는것도 좋은 방법 같습니다.

익명 사용자의 이미지

sepiros wrote:

...
어느분께서..winpcap는 패킷을 모니터링(복사 후 보는거) 라서.. 차단이 어렵다고 하는데..
...

winpcap때문이 아니라, 토폴로지(topology)문제 입니다.
해당 프로그램을 장착한 시스템이 게이트웨이(gateway)에 있는가? 아닌가?의
차이입니다.
참고로, 만일, 랜카드 2개를 장착한 PC를 게이트웨이로 하여 양단간의 트래픽을 캡쳐한 후 이를 분석 및 필터링하여 반대편으로 전송하게 프로그램을 작성한다면, 차단이 어려운것은 아닙니다.
또한, Winpcap에도 SendPacket()이라는 패킷을 전송하는 루틴이 있습니다.
리눅스(netfilter), *BSD(pf)라고 할지라도 게이트웨이가 아니고서는 차단할 방법이 마땅히 없는것입니다.
sepiros wrote:

...
되신 send packet 해서 rst를 내려 보내면.. tcp에서 자동으로 차단이 된다고 하네요.
...

이또한 토폴로지 문제에 걸립니다.
1) Winpcap이 스위치의 미러링포트를 받아서 쓰는 경우(수동적인 수신;passive monitoring)에는 일단 100% 패킷을 잡는다는 것은 불가능합니다. 또한, 트래픽양이 많은 시간대 또는 상황이 발생할때,
100% 차단이 보장되지 않습니다. 소위, 재수없으면
잘 안되는...... 그래도 대충 차단은 합니다. (제품성은 있으나, 상품성은 떨어지는....)
2) 만일 게이트웨이로 동작한다면 차단이 100%보장됩니다만, 이때는 성능 및 안정성 문제가
가장 큰 장애요인입니다. 마치 검열이 심한 특정조직의 우편물이 오래걸릴 수 있는
것과 마찬가지지요. 또한, 안정성은, 해당 프로그램이 잘못될 경우 망(network)이 마비된다는......

sepiros wrote:

...

지금 제가 궁금한건.. send packet 하는 부분이.. 어렵네요..
...

libnet또는 libnetNT와 tcp reset등을 키워드로 검색해보면 대충 자료를 얻으실 수 있을 것입니다.
tcp 헤더 및 그 용도와 의미를 명확히 이해를 해야 합니다.

eoxjf의 이미지

어느분께서..winpcap는 패킷을 모니터링(복사 후 보는거) 라서.. 차단이 어렵다고 하는데..

이부분을 구현하시기 위해서는 드라이버를 개발하지 않고 winpcap을 사용하실 경우
PC에 랜카드를 2개 장착하신 후 하시는게 가장 확실한 방법입니다.

in/out을 각각의 랜카드가 따로 작동하게끔 해주는 방식입니다.

sendpacket 사용방법은

pcap_sendpacket이라는 함수를 이용하면 그다지 어렵지 않습니다.
리눅스와 윈도우의 차이점은 그다지 없습니다.

pcap_sendpacket함수의 인자값으로는 첫번째 인자는 장치디스크립터가 오고 두번째 인자는 unsigned char* 값이 와야합니다.
즉 패킷의 시작주소가 됩니다.

마지막 세번째 인자는 패킷의 길이가 됩니다.

패킷조립방식은 각각의 프레임을 RAW하게 코딩하셔서 패킷조립후 함수를 이용하여 out장치디스크립터로 전송하시면됩니다.

질문하신분과 같은경우 in으로 들어온패킷을 잡아서 사용자가 원하는 룰에 맞는지 검사하고 룰에 걸릴 경우
out장치로 쏘지 않으면 됩니다. 그럴경우 패킷은 자동드랍됩니다.

물론 밑에 하단에 있는 PC의 경우 in장치와 연결이 되있고 밖으로 나가는 외부 회선은 out과 연결되있어야됩니다.

충분한 답변이 되셨을런지 모르겠네여

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.