LINUX.ORG.RU

[СИ] Где расположены данные сокета?

 


0

0

Вот возник вопрос. Как получить доступ к исходящим данным tcp пакета? Например, при работе последней функции «сетевого уровня» [ __ip_local_out . Можно просмотреть через skb->data_len размер данных в пакете транспортного уровня (он указан верно). Указатели: skb->network_header; skb->transport_header; Корректно указывают на заголовки пакетов сетевого и транспортного уровней. Заголовки расположены последовательно в «хранилище данных пакета» (как и должно быть). Далее перемещаю указатель на данные после skb->transport_header; и пытаюсь их вывести. Но их в этом хранилище нет) (видимо их ещё туда не поместили) А так как __ip_local_out выглядит так.

int __ip_local_out(struct sk_buff *skb) {

struct iphdr *iph = ip_hdr(skb);

iph->tot_len = htons(skb->len);

ip_send_check(iph);

return nf_hook(PF_INET, NF_INET_LOCAL_OUT, skb, NULL, skb_dst(skb)->dev, dst_output);

}

Видим что дальше вызывается dst_output

static inline int dst_output(struct sk_buff *skb) { return skb_dst(skb)->output(skb); }

static inline struct dst_entry *skb_dst(const struct sk_buff *skb) { return (struct dst_entry *)skb->_skb_dst; }

Тоесть вызывается в конце концов int (*output)(struct sk_buff*); из «struct dst_entry»

То видимо данные tcp пакета, кладутся в хранилище, после данного вызовы.( хз правильно ли я думаю). Как получить доступ к этим данным???

И ещё один момент. Если вызвать skb_copy данного skb, то skb->data копии сокета, будет указывать на нужные мне данные, которые уже помещены в «хранилище буфера сокета».

Подведу итог вопроса: Как получить доступ к данным, отправляемого пакета в сеть, не прибегая к помощи skb_copy.

Deleted

отвечая на единственный правильный вопрос: bpf/pcap? или тебе обязательно в пространстве ядра?

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

bpf/pcap не предлагать) Нужно обязательно в пространстве ядра.

Deleted
()

Ну найди место, где copyfromuser() после send() делается, в чем проблема? А вообще netfilter есть для таких целей.

frey ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.