raw 소켓프르그래밍 질문입니다.

revol2236의 이미지

안녕하세요

kldp눈으로만 보다가(실력이 모잘라서 글을 올릴 용기가,,,,) 요즘 공부하는 소켓에 대한 질문 드립니다..

요즘 raw 소켓을 공부하고 있는데요

구글링으로 ip tcp헤더로 페킷을 보내는 소스를 구해서 한번 실행시켜 봤습니다..

그런데 tcpdump로 패킷을 잡아서 보는데 제가 보낸 패킷은 하나도 나오지 않도군요,,;;

그 소스입니다

#include <stdio.h>
 
#include <stdlib.h>
 
#include <unistd.h>
 
#include <string.h>
 
 
 
// Socket 관련 헤더 파일 포함
 
#include <sys/socket.h>
 
#include <sys/types.h>
 
#include <arpa/inet.h>
 
#include <netinet/in.h>
 
 
 
// tcp/ip 관련 헤더 파일 포함
 
#include <linux/ip.h>
 
#include <linux/tcp.h>
 
 
 
int main()
 
{
 
        unsigned char packet[40];
 
        int raw_socket;
 
        int on = 1 ;
 
 
        struct iphdr *iphdr;
       struct tcphdr *tcphdr;
        struct sockaddr_in address;
 
        raw_socket = socket( AF_INET, SOCK_RAW, IPPROTO_RAW );
        setsockopt( raw_socket, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(on) );
 
 
tcphdr = (struct tcphdr *)(packet + 20);
 
memset( (char *)tcphdr, 0, 20 );
 
        tcphdr->source = htons( 777 );
        tcphdr->dest = htons( 12345 );
        tcphdr->seq = htonl( 8 );
        tcphdr->ack_seq = htonl(9 );
        tcphdr->doff = 5;
        tcphdr->syn = 1;
        tcphdr->window = htons( 512 );
        tcphdr->check = 1;
 
 
iphdr = (struct iphdr *)packet;
 
        memset( (char *)iphdr, 0, 20 );
        iphdr->version = 4;
        iphdr->ihl =4;
        iphdr->protocol = IPPROTO_TCP;
        iphdr->tot_len = 40;
       iphdr->id = htons( 777 );
        iphdr->ttl = 60;
        iphdr->check = 1;
 
 
        iphdr->saddr = inet_addr( "111.111.111.111" );
 
 
        iphdr->daddr = inet_addr( "192.168.10.110" );
 
        address.sin_family = AF_INET;
 
        address.sin_port = htons( 12345 );
 
        address.sin_addr.s_addr = inet_addr( "192.168.10.110" );
 
 
sendto( raw_socket, &packet, sizeof(packet), 0x0,
 
(struct sockaddr *)&address, sizeof(address));
}

목적지는 제공유기내에 ip로 했습니다

체크섬 계산은 일부로 뺐습니다.....

무엇이 문제인지 모르겠습니다,,,,

raw socket에 관한책은 제가봤을때에는 거의 없었기 때문에 이렇게 질문 올립니다,,

벌써 이것땜에 이틀밤에 밤을 세웠네요,,;;

ps. icmp 헤더와 tcp/ip헤더를 같이 쓰려하는데 어떻하는지 아십니까??ㅋㅋ

antaran의 이미지

성공적으로 실행되어도 공유기로 보내셨다고 하면 확인할 방법이 없는 듯 한데요?

raw socket에 관한 예제는 구글링 해보셔도 어느정도(?) 나옵니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.