吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

自己如何實現一個簡化的程序ethcheck?

dyquk4xk2p3d ? 來源:良許Linux ? 2023-11-30 09:35 ? 次閱讀

一、usb網卡應該如何實現?

前文講了如何利用開源軟件ifplugd實現監測網口狀態變化,

ifplugd的確可以實現監測網卡的狀態,并執行相應腳本,

但是有個前提,就是網口已經注冊到系統中,即用ifconfig -a能查看到

如何是usb網卡這種設備,在插入usb口之后網口設備才會注冊

使用過程中可能隨時會拔掉usb網卡,

那么這種情況下,要想設置usb網卡,那么就就需要修改ifplugd程序。

為了方便大家理解,本文給大家講解如何自己實現一個簡化的程序ethcheck

可以實現自動監測網卡是否存在

rk3568所有網口:

rk3568_r:/system#ifconfig-a
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Mask:255.0.0.0
inet6addr:::1/128Scope:Host
UPLOOPBACKRUNNINGMTU:65536Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

dummy0Linkencap:EthernetHWaddrfa6c1b:7d
inet6addr:fe80:6cff1b7d/64Scope:Link
UPBROADCASTRUNNINGNOARPMTU:1500Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:8errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:560

sit0Linkencap:IPv6-in-IPv4
NOARPMTU:1480Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

ip6tnl0Linkencap:UNSPEC
NOARPMTU:1452Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

eth1Linkencap:EthernetHWaddr5a63dd:0bDriverrk_gmac-dwmac
UPBROADCASTMULTICASTMTU:1500Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0
Interrupt:51

ip_vti0Linkencap:UNSPEC
NOARPMTU:1480Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

eth0Linkencap:EthernetHWaddr5e63dd:0bDriverrk_gmac-dwmac
UPBROADCASTMULTICASTMTU:1500Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0
Interrupt:38

ip6_vti0Linkencap:UNSPEC
NOARPMTU:1364Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

二、程序設計

0.程序框圖

8ab7bcd0-8f10-11ee-939d-92fbcf53809c.png

1. 設置程序為守護進程

因為該程序最終要在后臺執行,并且常駐內存,所以必須將該進程設置為守護進程

參考代碼如下:

voidinit_daemon(void)
{
intpid;
inti;

if(pid=fork())
exit(0);//是父進程,結束父進程?

elseif(pid

2. 確認制定網口是否存在?

要確認指定網口是否存在,主要通過/proc/net/dev 目錄下是否有該網口信息

peng@ubuntu:~$cat/proc/net/dev
Inter-|Receive|Transmit
face|bytespacketserrsdropfifoframecompressedmulticast|bytespacketserrsdropfifocollscarriercompressed
lo:2616329200000026163292000000
eth0:2854447082432730000009182827088660000000

參考代碼:

staticchar*interface_name_cut(char*buf,char**name)
{
char*stat;
/*Skipwhitespace.Linewillincludeheaderspaces.*/
while(*buf=='')
buf++;
*name=buf;
/*Cutinterfacename.*/
stat=strrchr(buf,':');
*stat++='?';
returnstat;
}
/*
returnvalue:1exist0:no
*/
intcheck_interface_fromproc(char*interface)
{
FILE*fp;
charbuf[PROCBUFSIZ];
structinterface*ifp;
char*name;

/*Open/proc/net/dev.*/
fp=fopen(_PATH_PROC_NET_DEV,"r");
if(fp==NULL)
{
printf("openprocfileerror
");
return-1;
}

/*Dropheaderlines.*/
fgets(buf,PROCBUFSIZ,fp);
fgets(buf,PROCBUFSIZ,fp);

/*Onlyallocateinterfacestructure.Otherjobswillbedonein
if_ioctl.c.*/
while(fgets(buf,PROCBUFSIZ,fp)!=NULL)
{
interface_name_cut(buf,&name);
if(strcmp(interface,name)==0)
return1;
}
fclose(fp);
return0;
}

3. 指定網口不存在

如果檢測網口不存在,則需要休眠,然后繼續監測/proc/net/dev文件。

4. 如果指定網口存在

則獲取該網口的IP地址,然后比較是否是指定的IP地址

網卡IP地址的獲取,主要通過系統調用ioctl()的 SIOCGIFADDR命令實現

參考代碼如下:

intgetLocalIp(constchar*eth,char*ip){
structifreqifr;
structsockaddr_insin;
intfd;
bzero(&ifr,sizeof(ifr));
if((fd=socket(AF_INET,SOCK_STREAM,0))

讀取的ip地址存放在參數ip指向的內存中。

5. ip地址相同

如果網卡地址與指定的ip地址相同,那么不需要修改地址,休眠一段時間(根據實際操作的頻率設置時間),然后再監測網口是否存在

6. IP地址不相同

如果ip地址不相同,則需要修改ip地址,

執行我們提前設置好的腳本if.sh即可

#!/bin/bash

IPADDR=192.168.40.8
ETHPORT=eth1
echo"ethcheckset"$ETHPORT$IPADDR
echo$#
echo$0
echo$1
echo$2
if[$#-eq2];then
if[$1=$ETHPORT];then
echo$ETHPORT
if[$2="up"];then
ifconfig$ETHPORT$IPADDR
sleep1
ipruleaddfromalllookupmainpref9000
sleep1
echo1>/proc/sys/net/ipv4/ip_forward
iptables-F
echo"set"$ETHPORT"done"
elif[$2="down"];then
echo"down"
elif[$2="disable"];then
echo"disable"
elif[$2="error"];then
echo"error"
fi
fi
fi





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • USB接口
    +關注

    關注

    9

    文章

    702

    瀏覽量

    55832
  • RK3568
    +關注

    關注

    4

    文章

    525

    瀏覽量

    5235
收藏 人收藏

    評論

    相關推薦

    自己做的小抽獎程序

    自己做的小抽獎程序,功能比較單,獲獎的名字沒有移除,所以不排除重復的可能。另外加載的數據只能是文本文件,但是可以有excel文件轉換。
    發表于 12-05 22:40

    自己編的程序,學習用的

    自己編的程序,學習用的。。。。
    發表于 05-29 08:11

    能在138控制部分簡化程序嗎?

    剛學習STM32,想用片164芯片和片138控制64LED,實現跑馬燈效果,以下是自己寫的程序
    發表于 10-14 22:20

    分享自己做的oled屏貪吃蛇程序

    分享自己做的oled屏貪吃蛇程序程序是用stm32寫的,但是移植起來卻特別簡單,oled是iic的,算是滿足
    發表于 07-10 11:08

    想要自己實現bootloader,APROM中程序如何實現跳轉,中斷向量表如何設置?

    我要自己實現bootloader,bootloader在M487的APROM里面,APP也在APROM里面,如何實現從bootloade
    發表于 06-27 08:39

    用FPGA實現DES算法的密鑰簡化算法

    介紹DES的密鑰算法,提出種用預計算簡化密鑰計算的方法并公布了預計算的C語言源程序。這種方法對 DES的硬件實現有非常好的簡化效果。
    發表于 04-07 09:41 ?14次下載

    程序運行之后把自己刪除的方法

      近日看到網友詢問如何實現程序運行之后把自己刪除的方法,不知大家對木馬甚么的興趣實在太濃,還是想要這樣的效果:用戶只要運行程序,可執行文
    發表于 08-30 11:38 ?2860次閱讀

    利用USBXpress開發包簡化應用程序實現USB通信設計

    傳統的USB設備驅動程序編寫異常復雜,程序員往往很難入手。SILICON Laboratories公司提供的USBXpress開發包大大簡化了USB通信的應用和相關驅動程序的開發,只要
    的頭像 發表于 01-14 08:02 ?2692次閱讀
    利用USBXpress開發包<b class='flag-5'>簡化</b>應用<b class='flag-5'>程序</b><b class='flag-5'>實現</b>USB通信設計

    自己DIY制作電流電壓表的程序些文件免費下載

    本文檔的主要內容詳細介紹的是自己DIY制作電流電壓表的程序些文件免費下載。
    發表于 05-23 17:42 ?57次下載
    <b class='flag-5'>自己</b>DIY制作<b class='flag-5'>一</b><b class='flag-5'>個</b>電流電壓表的<b class='flag-5'>程序</b>和<b class='flag-5'>一</b>些文件免費下載

    如何自己制作單片機開發板

    之所以做這個的初衷是應為自己買的51 開發板已經下載不了程序了,所以想做一個下載程序的最小系統,可是做到后來,就覺著這么大塊萬用板只是做
    發表于 09-02 16:43 ?14次下載
    如何<b class='flag-5'>自己</b>制作<b class='flag-5'>一</b><b class='flag-5'>個</b>單片機開發板

    使用單片機實現LED隔程序和仿真資料免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現LED隔程序和仿真資料免費下載。
    發表于 03-18 17:11 ?8次下載

    程序是如何運行起來的

    問題。 還是和之前樣,我畫了程序運行的全景圖,在上圖中,程序運行所經歷的代碼段,我都標
    的頭像 發表于 10-12 17:48 ?3377次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>程序</b>是如何運行起來的

    stm32單片機如何實現按鍵切換兩程序

    stm32單片機如何實現按鍵切換兩程序? 作為款功能強大的微控制器,STM32單片機可以
    的頭像 發表于 09-14 14:22 ?6320次閱讀

    如何編寫自己的 starter

    前面給大家介紹了 SpringBoot 的自動裝配功能,相信大家對自動裝配都有了很好的理解,那么今天阿粉通過示例來給大家演示下如何編寫
    的頭像 發表于 10-08 14:42 ?964次閱讀
    如何編寫<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>自己</b>的 starter

    如何自己搭建服務器?

    如何自己搭建服務器?自己搭建服務器涉及到硬件和軟件兩
    的頭像 發表于 12-12 16:52 ?3981次閱讀
    博E百娱乐城| 麻将百家乐筹码| 鄂州市| 百家乐图形的秘密破解| 银河百家乐官网的玩法技巧和规则 | 百家乐官网五湖四海赌场娱乐网规则 | 皇冠在线开户| 做生意讲究风水吗| 百家乐庄闲机率分析| 百家乐官网正网| 老虎机游戏在线玩| bet365是否合法| 澳门百家乐官网博客| 百家乐官网7scs娱乐场| 百家乐官网投注心态| 百家乐官网筹码防伪| 正规百家乐游戏下载| 娱网棋牌大厅下载| 百家乐官网对打反水| 百家乐官网兑换棋牌| 百家乐官网路单统| 威尼斯人娱乐场安全吗| 大发888登不上| 澳门百家乐必胜看| 总统国际娱乐城| 百家乐官网程序开户发| 百家乐最佳投注办法| 线上百家乐怎么玩| 大世界百家乐官网现金网| 爱婴百家乐官网的玩法技巧和规则| 百家乐孖宝揽| A8百家乐官网现金网| 澳门百家乐技巧| 百家乐官网视频美女| 百家乐棋牌辅助| 百家乐官网封号| 百家乐路子技巧| 优博在线娱乐| 上海百家乐的玩法技巧和规则 | 澳门百家乐官网心得玩博| 百家乐游戏怎样玩|