TreeviewCopyright © aleen42 all right reserved, powered by aleen42
Original Socket Coding Back
- write a new higher-level transport protocol based on IP protocol
1. Create original socket
method
int socket(int family, int type, int protocol)
parameters
- family: AF_INET
- type: SOCK_RAW
- protocol:
- IPPROTO_ICMP: ICMP數據包
- IPPROTO_IGMP: IGMP數據包
- IPPROTO_IP: IP數據包
return value
- >=0: success
- -1: failure
2. Set IP options
- set whether automatically fill the IP header
int on = 1;
setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));
- on=0: 由協議自動填充
- on=1: 用戶程序填充
3. Bind
- if IP_HDRINCL has been set,
bind()
takes no effect, and you must fill each IP datagram by yourself - local bind:
bind()
- opposite bind:
connect()
4. Send or Receive
send
- if you has not called
connect()
to bind, you must usesento()
orsendmsg()
to send data - if you has called, then
write()
orsend()
is allowed to use
receive
- data from UDP and TCP won't be sent to original socket
- receive data from ICMP
- echo response
- timestamp response
- mask response
- ...
- receive data from other types of protocols
- receive data which cannot be recognized by the Kernel
As the plugin is integrated with a code management system like GitLab or GitHub, you may have to auth with your account before leaving comments around this article.
Notice: This plugin has used Cookie to store your token with an expiration.