当前位置:  技术问答>linux和unix

solaris 获取mac地址全0的问题??

    来源: 互联网  发布时间:2016-10-17

    本文导语:  本帖最后由 chygao 于 2010-08-30 10:24:16 编辑 在jpcap.jpcapCaptor.getDeviceList()在opensolaris和solaris8下获得的mac地址全0,不解,请高手指点!! /** Get Interface List **/ JNIEXPORT jobjectArray JNICALL Java_jpcap_JpcapCaptor_getDeviceList   (JNIEnv...

本帖最后由 chygao 于 2010-08-30 10:24:16 编辑
在jpcap.jpcapCaptor.getDeviceList()在opensolaris和solaris8下获得的mac地址全0,不解,请高手指点!!
/**
Get Interface List
**/
JNIEXPORT jobjectArray JNICALL Java_jpcap_JpcapCaptor_getDeviceList
  (JNIEnv *env, jclass cl)
{
pcap_if_t *alldevs;
pcap_if_t *d;
pcap_addr_t *a;
pcap_t *tmp_pcap;
char errbuf[PCAP_ERRBUF_SIZE];
int i=0,j=0,k=0;
jobjectArray devices=NULL;
jobjectArray addresses=NULL;
jobject device=NULL;
jobject address=NULL;
int linktype;
jstring lname,ldesc;
#ifdef WIN32
    u_long size=0;
PIP_INTERFACE_INFO pInfo = NULL;
MIB_IFROW MibIfRow;
char **devnames;
char *p1,*p2,*p3;
#else
#ifdef SIOCGIFHWADDR // Linux
    int sd;
    struct ifreq ifr;
u_char buf[6];
#else //FreeBSD
    struct ifaddrs *ifa, *ifa0;
    struct sockaddr_dl* dl;

    getifaddrs(&ifa0);
#endif
#endif

Interface=FindClass("jpcap/NetworkInterface");
deviceConstMID=(*env)->GetMethodID(env,Interface,"","(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;[B[Ljpcap/NetworkInterfaceAddress;)V");
IAddress=FindClass("jpcap/NetworkInterfaceAddress");
addressConstMID=(*env)->GetMethodID(env,IAddress,"","([B[B[B[B)V");

(*env)->ExceptionDescribe(env);

/* Retrieve the device list */
    if (pcap_findalldevs(&alldevs, errbuf) == -1)
    {
        fprintf(stderr,"Error in pcap_findalldevs: %sn", errbuf);
        return NULL;
    }

//count # of devices
for(i=0,d=alldevs;d;d=d->next,i++);

//create array
devices=(*env)->NewObjectArray(env,(jsize)i,Interface,NULL);

#ifdef WIN32
//obtain necessary size
GetInterfaceInfo(NULL, &size);
//allocate memory
pInfo = (PIP_INTERFACE_INFO) malloc (size);
if(GetInterfaceInfo(pInfo, &size)!=NO_ERROR){
Throw(IOException,"GetInterfaceInfo failed.");
return NULL;
}
#endif

/* Set Interface data */
    for(i=0,d=alldevs;d;d=d->next)
    {
jbyteArray mac=(*env)->NewByteArray(env,6);
//set mac
#ifdef WIN32
// compare the device names obtained from Pcap and from IP Helper
// in order to identify MAC address
// since device name differs in 9x and NT/XP, compare name
// from the end (not sure if this works in every case. I hope it does..)
p1=d->name;
while(*p1!=0) p1++;  //find the end

//convert wchar to char
devnames=(char **)malloc(sizeof(char *)*pInfo->NumAdapters);
for(j=0;jNumAdapters;j++){
size=WideCharToMultiByte(0,0,pInfo->Adapter[j].Name,-1,NULL,0,NULL,NULL);
devnames[j]=(char *)malloc(size);
WideCharToMultiByte(0,0,pInfo->Adapter[j].Name,-1,devnames[j],size,NULL,NULL);
//printf("%sn",devnames[j]);
}

for(j=0;jNumAdapters;j++){
p2=p1;
p3=devnames[j];
while(*p3!=0) p3++; //find the end
k=0;
//printf("%s,%s:%dn",d->name,devnames[j],j);
while(*p2==*p3){
p2--; p3--; k++;
//printf("%c,%c,%dn",*p2,*p3,k);
}
if(kAdapter[j].Index;
GetIfEntry(&MibIfRow);
(*env)->SetByteArrayRegion(env,mac,0,MibIfRow.dwPhysAddrLen,MibIfRow.bPhysAddr);
}

#else
#ifdef SIOCGIFHWADDR  //Linux
    /* make socket */
    sd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sd 

    
 
 

您可能感兴趣的文章:

  • Solaris 9中的C程序如何获取执行程序所在的路径?
  • 在solaris中如何通过SNMP获取磁盘容量等信息。
  • Solaris 8.0 获取 MAC地址的API是什么?
  • 谁能提供SUN SOLARIS 8的第4张盘的下载地址,谢谢200分
  • 急啊,双机的Solaris 8,如何更改ip地址。??
  • 在solaris,可以ping自己,但是无法Ping通别的IP地址
  • 在Solaris 8下怎样才能修改网卡Mac地址???
  • 高分求购solaris 9 soc unix 5.0.5的下载地址?
  • Web服务器/前端 iis7站长之家
  • 在SOLARIS下如何根据IP地址段做telnet限制?
  • 如何停止和删除 solaris 的一个IP地址 ???
  • 在solaris中如何用命令行改变IP地址,并且永久生效。
  • Solaris10如何设置IP地址
  • 请问在SUN SOLARIS中如何设置IP地址,网关和DNS?谢谢!
  • 请教:安装solaris时报错:“试图为myserver设置名称到地址的反向映射时出现以下错误:set_lb_ntoa_entry:I/O error”
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • solaris 8上能用gcc for solaris7 或 solaris9的版本吗?
  • Solaris菜鸟!!!请问Solaris SPARC和Solaris x86这两个版本之间有什么具体的差异吗?
  • 请问Solaris现在最高的版本是多少?Solaris8.0价格如何?Solaris8.0和Red Hat Enterprise Linux AS 3.0有何区别?
  • 请教solaris高手一个solaris安装问题
  • solaris 10下的多线程和solaris 5.8下多线程编译有什么区别??
  • 听说在solaris上运行java飞快,solaris有多大,如果不大,我想下载,哪有下载?
  • 请问:SOLARIS(for intel)如何装d-link网卡。哪儿下Solaris电子文档。
  • Solaris for X86 和Solaris for Sparc主要区别在哪?
  • 请问Solaris的优势?Solaris下开发相关及系统管理相关资料是否有提供?谢谢
  • telnet 进去的时候我看写着SUN OS5.8,这个是不是Solaris?我找不到Solaris5.8的软件?
  • 没有光碟,怎样从solaris8升级到solaris9?
  • solaris 10能不能远程桌面连接Solaris 10(或 Linux) ,不要安装其他软件
  • 请问高手,在Solaris 8 gcc3.1编译的 *.o 和库文件 *.a ,可以提供在Solaris 7,9下使用吗?
  • 我装了Solaris后,98和2000都找不到了,启动时直接进入Solaris,该怎么办,请高手指点!
  • solaris开发一窍不通,如何开发Solaris下的c程序?
  • 想用Virtual PC虚拟UNIX,求Solaris 10 ,Solaris 10 for x86版或已经设置好的虚拟文件?
  • 怎么修改IP(SOLARIS),怎么在WIN上用EXTRX!X连上SOLARIS
  • solaris 10 下怎么安装jdk-6u5-solaris-i586.sh? ftp上传大文件中断怎么解决?
  • 专门为难solaris高手,之solaris10的修改最大TCP连接数问题
  • solaris root 的shell搞错了,提示 no shell root 进不了!(solaris 8 for x86)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3