2

のソースコードを検索しましたがifup、見つかりませんでした。代わりに、ifdown.cを少し変更して、次のコードを作成しました。

int ifup(char interface[])
{
    struct ifreq ifr[64];
    struct ifconf ifc;
    int i, fd;
    int numif;
    int shaper;

    if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        fprintf(stderr, "ifdown: ");
        perror("socket");
        return -1;
    }
    ifc.ifc_len = sizeof(ifr);
    ifc.ifc_req = ifr;

    if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
        fprintf(stderr, "ifup: ");
        perror("SIOCGIFCONF");
        close(fd);
        return -1;
    }
    numif = ifc.ifc_len / sizeof(struct ifreq);

    for (shaper = 1; shaper >= 0; shaper--) {
        for (i = 0; i < numif; i++) {
            if (strcmp(ifr[i].ifr_name, interface) == 0){
                ifr[i].ifr_flags |= (IFF_UP);
                if (ioctl(fd, SIOCSIFFLAGS, &ifr[i]) < 0) {
                    fprintf(stderr, "ifup: shutdown ");
                    perror(ifr[i].ifr_name);
                }
            }
        }
    }
    close(fd);

    return 0;
}

上記のコードを使用するifdown("wlan0");ifup("wlan0");、インターフェイスが無効になり、有効になります。最後に、iwconfig でインターフェイスに IP アドレスと essid などがあることがわかります。ルーターに ping を実行できますが、どのドメインまたは直接の IP アドレスにも ping を実行できません

ping 74.125.232.98出力

connect: Network is unreachable

ネットワークマネージャーを介してルーターを切断して再度接続しない限り。

端末からifup(8)を使えばそのような問題はありません。

上記のコードを次のように機能させるには、他に何をする必要があるか教えてもらえますifup(8)か?

4

2 に答える 2

0

外部ホストに到達する前に、ルーティングもセットアップする必要があります

于 2013-11-07T22:51:29.063 に答える